Ale*_*dre 3 activerecord ruby-on-rails
移民
class CreateUsers < ActiveRecord::Migration
def change
create_table :users do |t|
t.string :name
t.string :password_digest
t.timestamps
end
end
end
Run Code Online (Sandbox Code Playgroud)
模型
class User < ActiveRecord::Base
attr_accessible :name, :password_digest
validates :name, :presence => true, :uniqueness => true
has_secure_password
end
Run Code Online (Sandbox Code Playgroud)
用户注册_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'
Run Code Online (Sandbox Code Playgroud)
当我尝试注册新用户时,它会抛出异常
ActiveModel::MassAssignmentSecurity::Error in UsersController#create
Can't mass-assign protected attributes: password, password_field
Run Code Online (Sandbox Code Playgroud)
我做错了什么?
您应该将这两个字段添加到has_accessible列表中.Rails不仅保护数据库字段不受大规模分配的影响,还保护所有字段,例如这些"虚拟"字段.
在用户模型中(而不是您的attr_accesible行):
attr_accessible :name, :password_field, :password
Run Code Online (Sandbox Code Playgroud)
此外,password_digest在任何情况下都不应该可以修改,即计算字段而不是用户输入.
| 归档时间: |
|
| 查看次数: |
2819 次 |
| 最近记录: |