0

我有一个包含很多宠物的数据库。我希望通过更改大小写来更新“名称”属性。我努力了:

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”
  • 无效的语法

我在这里想念什么?

4

3 回答 3

1

只要您在更新属性中引用自己的属性,您就无法在不迭代的情况下执行此操作。一个选项可以是:

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

另外的选择:

ActiveRecord::Base.connection.execute "UPDATE pets SET name = UPPER(name)"
于 2014-06-15T00:03:45.080 回答
0

这样做 Rails 方式:

Pet.update_all(:name => "UPPER(name)")
于 2014-06-15T20:26:51.483 回答
0

Pet.update_all('"name" = Upper("name")')在 Rails 5.2 中工作

于 2021-08-01T18:04:50.040 回答