批量分配忽略散列中的未定义属性

时间:2015-08-15 01:35:38

标签: ruby-on-rails-4

我的模型MyModel包含属性idname。通常我可以使用

创建一个新记录
my_model = MyModel.new(name: 'Bob')

我是否可以通过某种方式创建模型,以便忽略散列中实际不存在于模型中的属性?像这样:

my_model = MyModel.new(name: 'Bob', something_not_defined: 'Some string')

对于这个例子,我并不关心质量分配的安全性。该模型被提供一个散列,该散列可能包含我不关心的大量随机值,但它仍然包含许多映射到模型属性的值。

1 个答案:

答案 0 :(得分:1)

您可以覆盖模型的initialize方法,以丢弃您想要的任何属性。

class MyModel < ActiveRecord::Base
  def initialize(attributes = {})
    attributes = attributes.slice(:name)
    super attributes
  end
end

这种方法可能有意想不到的结果,因为Rails不会在每个场合都调用initialize,因此我最好在模型中使用该逻辑定义.build方法并使用它而不是{ {1}}初始化您的模型:

.new

然后像这样使用它:

class MyModel < ActiveRecord::Base
  def self.build(attributes = {})
    attributes = attributes.slice(:name)
    new attributes
  end
end