0

我想用 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(score: "这里我想把分数拿出来做一些修改然后存回去")

非常感谢。

4

2 回答 2

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}")
于 2013-12-03T21:59:26.787 回答
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

评论只是一个例子。

于 2013-12-03T21:49:36.617 回答