2

当我尝试创建一个新用户时,它说

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'
4

3 回答 3

3

几件事:

批量分配通常意味着将属性传递到创建对象的调用中,作为属性散列的一部分。也就是说,您将散列中的一堆属性传递给创建新对象的调用。例如:

@user = User.create({:name => "My name", :user_type => "nice_user"})

但是,Rails 包含一些基本的安全规则,这意味着默认情况下并非所有属性都可以这样分配。您必须事先指定哪些可以。你这样做:

class user < ActiveRecord::Base
  attr_accessible :name, :user_type
end

如果您没有指定属性 is 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
于 2012-07-02T13:05:08.030 回答
1

如果您共享了模型代码,那将会有所帮助。

在您的模型文件中将用户添加到 attr_accessible

attr_accessible :name
于 2012-07-02T12:03:43.313 回答
1

在您的config/application.rb中,您有以下行:

config.active_record.whitelist_attributes = true

在您的模型中,您错过了这一行:

attr_accessible :name

不要更改配置文件,而是添加attr_accessible. 您应该阅读http://guides.rubyonrails.org/security.html#mass-assignment以更好地了解批量分配安全问题。

于 2012-07-02T12:03:45.583 回答