迁移
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
我做错了什么?
答案 0 :(得分:5)
您应该将这两个字段添加到has_accessible
列表中。 Rails不仅保护数据库字段不受大规模分配的影响,还保护所有字段,例如这些“虚拟”字段。
在用户模型中(而不是attr_accesible
行):
attr_accessible :name, :password_field, :password
此外,password_digest
在任何情况下都不可用于修改,即计算字段而非用户输入。