我想通过 update_all 改变很多记录的属性。 用户应该能够相对更改优先级(记录 1 的优先级为 0,记录 2 的优先级为 200,用户可以选择给他们 +200,这样他们最终分别得到优先级 200 和 400)。 和同时更改其他列。 rails 中的首选方式是
Model.update_all(name: name)
但是对于 prio 我现在只有我知道的字符串形式 -
Model.update_all("prio = prio + #{change_of_prio}")
如何将后者改成rails的Hash-Form?或者,我如何在一个 update_all
语句中同时执行这两项操作(在不失去 rails 在使用 Hash 调用它时进行必要转义的优势的情况下)?
最佳答案
你必须使用数组表示法。这会起作用:
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 Hash 形式表示 update_all ("prio = prio + 200"),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21454792/