在一行中更改多个对象属性

jay*_*jay 31 ruby-on-rails ruby-on-rails-3

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

 @object = Model.new(:attr1=>"asdf", :attr2 => 13, :attr3 => "asdfasdfasfd")
Run Code Online (Sandbox Code Playgroud)

如果我想先使用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")
Run Code Online (Sandbox Code Playgroud)

如果有人有任何想法,那将是伟大的!

rjz*_*rjz 54

你想使用assign_attributesupdate_attributes:

@object.assign_attributes(:attr3 => "asdfasdf", :attr4 => "asdfasdf")
Run Code Online (Sandbox Code Playgroud)

如果您选择update_attributes相反,该对象将立即保存(当然,等待任何验证)