在Rails 5中更新模型上的特定属性

时间:2018-05-22 10:45:30

标签: ruby-on-rails ruby ruby-on-rails-5 rake-task

我对rails 5很新,需要一些语法的手......

我有两个模型SavingInvestment ..每个Saving可以有很多投资,所以关系是1:m。两个模型都有一个布尔属性is_autobid

我想创建一个rake任务,检索is_autobid = true所有的储蓄,然后将特定Saving记录的第一笔投资更新为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 :(得分:3)

您可以使用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