2

我正在我的模型中测试属性响应:

it { should respond_to(:password) }
it { should respond_to(:password_confirmation) }

这些属性不是数据库的一部分,只是在我的模型中声明为attr_accessible. 当我不声明它们并运行我的测试时,我得到:

ActiveModel::MassAssignmentSecurity::Error:
  Can't mass-assign protected attributes: password, password_confirmation

但是在我声明它们之后,我得到:

ActiveRecord::UnknownAttributeError:
  unknown attribute: password

知道为什么会这样吗?

4

2 回答 2

3

@8vius 因为您正在关注本教程,但还不够密切。您需要添加以下行:

has_secure_password

在 attr_accessible 下:email、:name、:role、:password、:password_confirmation

这允许您将纯文本密码和 password_confirmation 保存到内存中,以便您可以在加密和保存到数据库之前比较字符串并强制相等。您不想将密码以纯文本形式保存在数据库中。

于 2012-11-13T00:47:19.140 回答
2

attr_accessible告诉 Rails 你允许对属性进行所谓的批量赋值。

但是属性必须存在于 db 中,否则您应该创建 getter/setter,最简单的方法是:

attr_accessor :password_confirmation, :password

无论如何,您不存储密码听起来很奇怪。

于 2012-08-19T08:51:54.577 回答