我想知道,当您创建对象时,通常可以在一行中设置多个属性,例如:
@object = Model.new(:attr1=>"asdf", :attr2 => 13, :attr3 => "asdfasdfasfd")
如果我想先使用find_or_create_by,然后再更改其他属性怎么办?通常,我将不得不使用多行,例如:
@object = Model.find_or_create_by_attr1_and_attr2(“asdf”,13)
@ object.attr3 =“asdfasdf”
@ object.attr4 =“asdf”
有什么方法可以使用类似于Model.new方法如何接受键值对的哈希值来设置属性?我对此感兴趣,因为我可以在一行上设置多个属性,例如:
@object = Model.find_or_create_by_attr1_and_attr2("asdf", 13)
@object.some_method(:attr3 => "asdfasdf", :attr4 => "asdfasdf")
如果有人有任何想法,那就太好了!
最佳答案
您要使用 assign_attributes
或 update
(这是不推荐使用的update_attributes
的别名):
@object.assign_attributes(:attr3 => "asdfasdf", :attr4 => "asdfasdf")
@object.update(attr3: "asdfasdf", attr4: "asdfasdf")
如果改为选择
update
,则该对象将立即保存(当然,在进行任何验证之前)。