Active Record指定从update_all中的where()中选择的值

时间:2013-12-03 21:46:08

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

我想用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(得分:“这里我想取出分数并做一些修改,然后再存储”)

非常感谢。

2 个答案:

答案 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

评论只是一个例子。