如何批量更新数组中模型的字段?
How do I mass update a field for models in an array?
我正在使用 Rails 4.2.7。如何在不将该信息实际保存到数据库的情况下批量更新我的模型数组的字段?我试过了
my_objcts_arr.update_all(my_object: my_object)
但这会导致错误
NoMethodError: undefined method `update_all' for #<Array:0x007f80a81cae50>
我意识到我可以遍历数组并单独更新每个对象,但我认为 Ruby 中有一种我不知道的更灵活的单行方式。
update_all
需要在 class 级别活动记录 model/relation 上调用,即用户或 TaxReturn。这是一个有点相关的 SO post showing some examples, and here is the api doc for update_all。它会将更新直接发送到数据库(毕竟它是一种活动记录方法),所以这不是你想要的。
您最好自己迭代和更新值 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"}]
我正在使用 Rails 4.2.7。如何在不将该信息实际保存到数据库的情况下批量更新我的模型数组的字段?我试过了
my_objcts_arr.update_all(my_object: my_object)
但这会导致错误
NoMethodError: undefined method `update_all' for #<Array:0x007f80a81cae50>
我意识到我可以遍历数组并单独更新每个对象,但我认为 Ruby 中有一种我不知道的更灵活的单行方式。
update_all
需要在 class 级别活动记录 model/relation 上调用,即用户或 TaxReturn。这是一个有点相关的 SO post showing some examples, and here is the api doc for update_all。它会将更新直接发送到数据库(毕竟它是一种活动记录方法),所以这不是你想要的。
您最好自己迭代和更新值 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"}]