ruby-on-rails - Ruby - 忽略 protected 属性

标签 ruby-on-rails ruby rails-activerecord

如何告诉 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/

相关文章:

ruby-on-rails - 如何引用我在 Fabricator 中制造的对象?

ruby - 截断、事务和删除数据库策略之间的区别

ruby-on-rails - 将值数组发送到 ruby​​ 中的 sql 查询?

ruby-on-rails - gmaps4rails 单标记自动缩放

mysql - 使用不同的 foreign_key 加入并搜索?

ruby-on-rails - 如何在 Rails 中覆盖 `root_path`?

arrays - 如何查找从文件中读取的二维数组元素出现的次数?

ruby-on-rails - Rails 观察器不工作

ruby-on-rails - Rails 处理多重关系的正确方法

ruby-on-rails - Rails 中带有 url_for 的完整 URL