我想用update_all更新多行,但是我需要使用从where()中选择的一列中的现有值,如何在update_all中指定值,它看起来像这样:
# == Schema Information
#
# Table name: records
#
# id :integer not null, primary key
# name :string
# game_id :integer
# score :integer
# date :date
Record.where(:name =>“mike”,:game_id => 1).update_all(得分:“这里我想取出分数并做一些修改,然后再存储”)
非常感谢。
答案 0 :(得分:2)
您必须使用SQL代码以您希望的方式进行更新。请注意,无法使用Ruby代码直接操作乐谱。如果需要,您可以创建数据库函数。
# Increment each score by a given amount
increment_amount = 10
Record.where(:name => "mike", :game_id => 1).update_all("score=score + #{increment_amount}")
答案 1 :(得分:0)
这不是真正的update_all用途。 update_all通常将某个模型的每个实例的值设置为一个值。您无法使用update_all而是执行类似
的操作Record.where(:name => 'mike', :game_id => 1).each do |record|
# record.score = record.score * 3 + 1
record.save!
end
评论只是一个例子。