rails update_all插值

时间:2014-06-14 23:58:00

标签: ruby-on-rails ruby update-all

我有一个有很多宠物的数据库。 我希望更新“' name'属性通过改变它的情况。 我试过了:

Pet.update_all(:name => Pet.name.upcase)
Pet.update_all(:name => name.upcase)
Pet.update_all(:name => :name.upcase)
Pet.update_all(:name => "#{name.upcase}")

但所有这些都返回:

  • " PETS"每个名字
  • " NAME"每个名字
  • " NAME"每个名字
  • 语法无效

我在这里错过了什么?

3 个答案:

答案 0 :(得分:1)

只要您在更新属性中引用自己的属性,如果不进行迭代,您将无法执行此操作。一个选项可能是:

Pet.all.each {|x| x.update(name: x.name.upcase)

另一种选择:

ActiveRecord::Base.connection.execute "UPDATE pets SET name = UPPER(name)"

答案 1 :(得分:0)

做Rails方式:

Pet.update_all(:name => "UPPER(name)")

答案 2 :(得分:0)

Pet.update_all('"name" = Upper("name")') 适用于 Rails 5.2