我想通过“全部更新”更改许多记录的属性。
用户应该能够相对地改变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/