我对Rails5很陌生,需要一些语法方面的帮助。
我有两个模型SavingInvestment每种储蓄都有许多投资,因此关系为1:m。两种模型都有一个布尔属性is_autobid
我想创建一个rake任务,检索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

最佳答案

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

关于ruby-on-rails - 在Rails 5中更新模型上的特定属性,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50465754/

10-11 03:40