我想知道,当您创建对象时,通常可以在一行中设置多个属性,例如:

 @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,则该对象将立即保存(当然,在进行任何验证之前)。

07-28 11:33