Обновление определенных атрибутов на моделях в Rails 5 - PullRequest
0 голосов
/ 22 мая 2018

Я очень новичок в рельсах 5 и мне нужна рука с некоторым синтаксисом.

У меня есть две модели Saving и Investment .. Каждая экономия может иметь много инвестиций, поэтому отношение равно 1: m,Обе модели имеют логический атрибут is_autobid.

Я хочу создать грабельное задание, которое извлекает все сбережения, где is_autobid = true, а затем обновляет первые вложения определенной записи сбережений до true ... пока у меня есть:

task :update_autobids => :environment do

  Saving.where(is_autobid: 1).all.each do |s|

    investment = s.investments.first(:is_autobid, 0)
    investment.update(is_autobid = 1)
  end
end

1 Ответ

0 голосов
/ 22 мая 2018

Вы можете использовать update_column для обновления одного столбца, он не будет проверять наличие каких-либо проверок, а вам нужно только обновить инвестиции, если какая-либо запись найдена

Saving.where(is_autobid: 1).each do |s|
  investment = s.investments.find_by(is_autobid: 0)
  investment.update_column(:is_autobid, 1) if investment
end

Обновить

Если вы хотите загрузить все записи одновременно, то вы можете сделать это с помощью запроса ниже

investments = Investment.includes(:saving).where("savings.id = (select id from savings where savings.is_autobid = 0 limit 1)").references(:saving)

investments.each do |investment|
  investment.update_column(:is_autobid, 1)
end
...