我对Rails5很陌生,需要一些语法方面的帮助。
我有两个模型Saving
和Investment
每种储蓄都有许多投资,因此关系为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/