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

Где комментарий это просто пример.

Другие вопросы по тегам