Ruby on Rails - Изменить значение столбца в задаче rake - PullRequest
0 голосов
/ 03 июня 2018

У меня есть задача rake, которая отправляет электронное письмо, если MailCourseWarn.where(needs_warned: true).Я хочу, чтобы после доставки электронной почты needs_warned be false, а не true.

Rake task:

namespace :course_available do
  desc 'Disparando e-mail de curso disponível'

  task :warn_user => :environment do |t, args|
    MailCourseWarn.where(needs_warned: true).each do |user|
      if user.course.start_at < Date.today
        MailCourseWarnMailer.delay_for(1.seconds, retry: true).course_available(user)
      end
    end
  end
end

Как я могу это сделать?Я пытался положить конец тактов user.needs_warned = false, но не сработало.

Спасибо.

Ответы [ 3 ]

0 голосов
/ 03 июня 2018

Вы можете обновить этот столбец в состоянии if.user.update_attribute(:needs_warned, false)

Например:

namespace :course_available do
  desc 'Disparando e-mail de curso disponível'

  task :warn_user => :environment do |t, args|
    MailCourseWarn.where(needs_warned: true).each do |user|
     if user.course.start_at < Date.today
       MailCourseWarnMailer.delay_for(1.seconds, retry: true).course_available(user)
       user.update_attribute(:needs_warned, false)
     end
    end
  end
end
0 голосов
/ 03 июня 2018

@ Филипп прав.Ваш код может быть даже улучшен путем вставки условия 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|)

0 голосов
/ 03 июня 2018

Работает ли user.update! needs_warned: false?Ваша версия изменяет запись, затем выбрасывает ее и не сохраняет ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...