几件事:
批量分配通常意味着将属性传递到创建对象的调用中,作为属性散列的一部分。也就是说,您将散列中的一堆属性传递给创建新对象的调用。例如:
@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/v3.2.9/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
此外,如果您在使用列名时遇到问题,type
因为 rails 感到困惑并认为您想使用单表继承 (STI),请查看此问题的答案以了解如何解决它:http:// guides.rubyonrails.org/