我的模型MyModel
包含属性id
和name
。通常我可以使用
my_model = MyModel.new(name: 'Bob')
我是否可以通过某种方式创建模型,以便忽略散列中实际不存在于模型中的属性?像这样:
my_model = MyModel.new(name: 'Bob', something_not_defined: 'Some string')
对于这个例子,我并不关心质量分配的安全性。该模型被提供一个散列,该散列可能包含我不关心的大量随机值,但它仍然包含许多映射到模型属性的值。
答案 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