如何告诉 Ruby (Rails) 忽略在批量分配时出现的 protected 变量?
class MyClass < ActiveRecord::Base
attr_accessible :name, :age
end
现在我将批量分配一个散列来创建一个新的 MyClass
。
MyClass.create!({:name => "John", :age => 25, :id => 2})
这会给我一个异常(exception):
ActiveModel::MassAssignmentSecurity::Error: Can't mass-assign protected attributes: id
我希望它创建一个具有指定(未 protected )属性的新 MyClass
并忽略 id
属性。
旁注:我如何也忽略未知属性。例如,MyClass
没有 location
属性。如果我尝试批量分配它,请忽略它。
最佳答案
使用Hash#slice
只选择您真正有兴趣分配的键:
# Pass only :name and :age to create!
MyClass.create!(params.slice(:name, :age))
通常,我会将 params
的包装器方法添加到我的 Controller 中,该方法将其过滤到仅我知道我想要分配的字段:
class MyController
# ...
def create
@my_instance = MyClass.create!(create_params)
end
protected
def create_params
params.slice(:name, :age)
end
end
关于ruby-on-rails - Ruby - 忽略 protected 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15008863/