调用attr_accessible时发生MassAssignmentSecurity错误

时间:2013-02-22 18:09:58

标签: ruby-on-rails ruby passwords

我跟着this tutorial一起跟随它,它告诉我

  

...将密码和password_confirmation属性添加到用户模型[...]与我们目前看到的其他属性不同,密码属性将是虚拟的 - 它们只会临时存在于内存中,并且不会坚持到数据库。

  

正如我们将在6.3.4节中看到的,这些虚拟属性由has_secure_password自动实现。

我的模型看起来像这样:

class User < ActiveRecord::Base
  VALID_EMAIL_REGEX = /\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i
  has_secure_password
  attr_accessible :email, :is_admin, :name, :password, :password_confirmation
  validates :name, presence: true, uniqueness: true
  validates :password_digest, presence: true
  validates :password, presence: true, length: { minimum: 6 }
  validates :password_confirmation, presence: true
  validates :email, presence: true, format: {with: VALID_EMAIL_REGEX}, uniqueness: true
end

所以现在当我尝试创建一个新用户时;

User.create(name: "Foo Bar", email: "foo@bar.net", password: "foobar", password_confirmation: "foobar")

我收到以下错误:

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

为什么?!

1 个答案:

答案 0 :(得分:2)

问题似乎是数据库中缺少password和password_confirmation列。

根据评论,重新迁移并重新启动服务器可以解决此问题。