我想通过“全部更新”更改许多记录的属性。
用户应该能够相对地改变prio(记录1有prio 0,记录2有prio 200,用户可以选择给他们+200,这样他们最终分别得到prio200和400)。
同时更改其他列。
在铁轨上,首选的方法是

Model.update_all(name: name)

但是对于prio我现在只知道字符串形式-
Model.update_all("prio = prio + #{change_of_prio}")

如何将后者更改为rails的散列形式?或者,如何在一个update_all语句中同时执行这两个操作(在使用散列调用rails时不会失去rails进行必要转义的优势)?

最佳答案

必须使用数组表示法。这将起作用:

Model.update_all(["prio = prio + :change_of_prio, name = :name", {change_of_prio: 200, name: "foo"}])
# UPDATE `models` SET prio = prio + 200, name = 'foo'

:change_of_prio:name是引用哈希中相应值的命名占位符。Rails为您处理转义。

关于sql - ActiveRecord哈希表,表示update_all(“prio = prio + 200”),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21454792/

10-11 06:33