sql - ActiveRecord Hash 形式表示 update_all ("prio = prio + 200")

标签 sql ruby-on-rails ruby activerecord

我想通过 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/

相关文章:

sql - 如何替换所有非数值?

sql - VBA - Access - 使用来自用户表单的新数据更新表

ruby - 如何在 Ruby 中使用 net-ssh sudo su

Ruby:我怎样才能让一个散列接受多个键?

MySQL 类断言约束

ruby-on-rails - Rails 在 JSON 中以不同方式编码 HTML,相同版本

css - rails :Set the pagination on the right-bottom

ruby-on-rails - 仪表板命名空间的 Rails 路由帮助

ruby-on-rails - Rails 服务器错误不清楚

sql - 在 Microsoft Access 中从 ... 中选择 Top (all but 10)