@ Филипп прав.Ваш код может быть даже улучшен путем вставки условия if в запрос SQL и выполнения массового обновления.Таким образом, вы получите только два SQL-запроса: (1) для получения записей, соответствующих вашему условию, и (2) для массового обновления.В противном случае ваш код может выполнить много запросов.
namespace :course_available do
desc 'Disparando e-mail de curso disponível'
task :warn_user => :environment do
results = MailCourseWarn
.joins(:courses)
.where('needs_warned = ? AND courses.start_date < ?', true, Date.today)
results.each do |user|
MailCourseWarnMailer.delay_for(1.seconds, retry: true).course_available(user)
end
results.update_all(needs_warned: false)
end
end
Обратите внимание, что я также немного упростил код (удалил ненужные |t, args|
)