Active Record укажите значение select from from () в 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 (score: "здесь я хочу вывести счет и внести некоторые изменения, а затем сохранить обратно")
Большое спасибо.
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}")
Это не совсем то, для чего используется 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
Где комментарий это просто пример.