新手问题 bycrpt 同时加密两个字段

azpokr · 2016年04月18日 · 最后由 azpokr 回复于 2016年04月18日 · 2766 次阅读

第一个是我的数据库 users 表结构 第二个是我要存的数据 第三个是 rake db:seed 报错 求解,是我写错了吗?还是说不能同时加密两个字段?

你数据库的字段和 seeds 中的属性不一样啊,你是在什么情况下加的什么密?

password 之所以不需要在数据库中声明,是因为重写了 User#password= 方法,实际存储为 password_digest,而不是 password。你的问题应该是没有重写 User#paypassword= 方法。自己去看下 Rails 模型中使用的 has_secure_password 的实现就清楚了。

#1 楼 @helperhaps 我是调用的 has_secure_password 方法,存的是加盐加密后的哈希摘要

#5 楼 @helperhaps 非常感谢,我就是用的这个,可能是我自己理解的不对,@watraludru的方法应该是对的

可以加密多个字段撒。报错信息已经告诉你了

unknown attribute paypassword.

你的数据库没有这个字段,要不就在 model 中 attr_accessor :paypassword。你要先看你用的是什么加密方法,ruby 提供了多种加密方法。你这里 用的是 bcrypt 用的是 has_secure_password 的加密方法,在 ActiveModel::SecurePassword module 中 默认创建了 password,password_confirmation。如果你用了 devise。devise 构造了 password 实例方法的,所以 User.create 中可以给 password 赋值,就好像 password 是你的字段一样,其实你数据库没这个字段。而 paypassword 是真的没有,所以就需要你自己来加上这个属性了。(看第一句话。。。厕所回来后发现大家都答了)

#7 楼 @pathbox 哦,原来如此,前辈我还想问个问题就是,rails 中父类中的方法怎么查看,路径是啥,我用的 sublime

#8 楼 @azpokr 用 rubymine 能帮你跳啊跳的跳到源码中,sublime 选中方法名称右键 有个 Go To defination(好像是这个) 可以帮你跳到项目中方法源码中,还可以在 rails console 中,xxx.superclass.methods 就是看父类定义了什么方法了。可以 xxx.superclass.methods grep(/xxxx/) 过滤查找。xxx.ancestors 祖先 (module or class) 的输出

需要 登录 后方可回复, 如果你还没有账号请 注册新账号