当我尝试创建新用户时,
ActiveModel::MassAssignmentSecurity::Error: Can't mass-assign protected attributes: name
from c:/RubyOnRails/Ruby1.9.3/lib/ruby/gems/1.9.1/gems/
activemodel-3.2.3/lib/active_model/mass_assignment_security/
sanitizer.rb:48:in `process_removed_attri
butes'
答案 0 :(得分:3)
一些事情:
批量分配通常意味着将属性传递给调用,该调用将对象创建为属性哈希的一部分。也就是说,您将哈希中的一堆属性传递给创建新对象的调用。例如:
@user = User.create({:name => "My name", :user_type => "nice_user"})
但是,Rails包含一些基本的安全规则,这些规则意味着默认情况下不能以这种方式分配所有属性。您必须事先指定哪些可以。你这样做:
class user < ActiveRecord::Base
attr_accessible :name, :user_type
end
如果您没有指定属性为attr_accessible
,并且您将其传递给创建对象,则会收到您发布的错误。
以下是更多详情:
http://api.rubyonrails.org/classes/ActiveModel/MassAssignmentSecurity/ClassMethods.html
另一种方法是在第一次创建记录时设置一些属性,然后在其后设置其他属性 - 如下所示:
# In this example `user_type` is not attr_accessible so it needs to be set specifically
@user = User.create({:name => "My name"})
@user.user_type = "nice_user"
@user.save
答案 1 :(得分:1)
如果您共享了模型代码,那将会有所帮助。
在您的模型文件中,将用户添加到attr_accessible
attr_accessible :name
答案 2 :(得分:1)
在config/application.rb
中,您有以下一行:
config.active_record.whitelist_attributes = true
在你的模特中,你错过了这一行:
attr_accessible :name
请勿更改配置文件,而是添加attr_accessible
。您应该阅读http://guides.rubyonrails.org/security.html#mass-assignment以更好地了解质量分配安全问题。