3

移民

class CreateUsers < ActiveRecord::Migration
  def change
    create_table :users do |t|
      t.string :name
      t.string :password_digest

      t.timestamps
    end
  end
end

模型

class User < ActiveRecord::Base
  attr_accessible :name, :password_digest
  validates :name, :presence => true, :uniqueness => true
  has_secure_password
end

用户注册_form

.main_form
  = form_for @user do |f|

    %div
      = f.label :name
      = f.text_field :name, :size=>40

    %div
      = f.label :password, "Password"
      = f.password_field :password

    %div
      = f.label :password_confirmation, "Confirmation"
      = f.password_field :password_field

    %div
      = f.submit 'Create user'

当我尝试注册新用户时,它会引发异常

ActiveModel::MassAssignmentSecurity::Error in UsersController#create

Can't mass-assign protected attributes: password, password_field

我做错什么了?

4

1 回答 1

5

您应该将这两个字段添加到您的has_accessible列表中。Rails 不仅保护数据库字段免于大量分配,还保护所有字段,如这些“虚拟”字段。

在用户模型中(而不是你的attr_accesible线):

attr_accessible :name, :password_field, :password

此外,password_digest在任何情况下都不应修改,即计算字段不是用户输入。

于 2012-08-10T10:11:11.390 回答