如何为阵列中的模型批量更新字段?

时间:2016-10-10 01:32:11

标签: ruby-on-rails arrays ruby model updates

我正在使用Rails 4.2.7。如何在不将实际信息保存到数据库的情况下批量更新模型数组的字段?我试过了

my_objcts_arr.update_all(my_object: my_object)

但这会导致错误

NoMethodError: undefined method `update_all' for #<Array:0x007f80a81cae50>

我意识到我可以对数组进行迭代并单独更新每个对象,但我认为Ruby中有一个更流畅的单行方式我不知道。

1 个答案:

答案 0 :(得分:0)

需要在类级别活动记录模型/关系上调用

update_all,即User或TaxReturn。这是一个有点相关的SO post showing some examples,这里是the api doc for update_all。它会将UPDATE直接发送到db(毕竟它是一个活动的记录方法),所以它不是你想要的。

你最好自己迭代和更新值with collect或类似的东西,这只是一行。

foo = [{:a=>"a", :b=>"b"}, {:a=>"A", :b=>"B:}] 
// => [{:a=>"a", :b=>"b"}, {:a=>"A", :b=>"B"}]
foo.collect{|x| x[:a]="C"} 
// => ["C", "C"]
foo 
// => [{:a=>"C", :b=>"b"}, {:a=>"C", :b=>"B"}]