我对rails 5很新,需要一些语法的手......
我有两个模型Saving
和Investment
..每个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
答案 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