使用Rail的Model.update方法而不在哈希中提供ID

时间:2019-12-19 06:15:17

标签: ruby-on-rails

因此,我知道您可以使用Model.update(ids, values)更新某些模型,其中ids代表ID,values代表实际更改。我也了解您可以传入一个哈希,例如{1 => {column_name: "new value"}, 2 => {column_name: "new value"}},它很好用。

但是,如果我想使用uuid之类的其他列而不是ID,该怎么办?我可以使用.update方法来达到类似Model.update(uuid: hash.keys, hash.values)的作用吗?

似乎无法使用此方法执行此操作,但是还有另一种方法可以执行此操作,这样就不必遍历长数组(包含数千个)中的每个键和值键和值)

这是我尝试实现自己想做的事情时发生的事情:

[2] pry(#<MyWorker>)> test = {"b7d720f984abeda37836d07b2147560ce06fb4d7e30fe8d59c1fe610cb440bbf" => {:protocol => "udp", :port => 5}}
=> {"b7d720f984abeda37836d07b2147560ce06fb4d7e30fe8d59c1fe610cb440bbf"=>{:protocol=>"udp", :port=>5}}
[3] pry(#<MyWorker>)> Port.update(uuid: test.keys, test.values)
SyntaxError: unexpected ')', expecting =>
...e(uuid: test.keys, test.values)
...                              ^
[3] pry(#<MyWorker>)>

1 个答案:

答案 0 :(得分:1)

正如塞巴斯蒂安·帕尔玛(Sebastian Palma)所说,您可以在where动作之前使用update子句来做到这一点,就像这样:

Port.where(uuid: test.keys).update(test.values)