Sidekiq Delayed Mailer с переменным именем метода

Просто для некоторого контекста: у меня есть 3 разных метода: welcome_email(user_id), Banned_email(user_id) и upgrade_email((user_id) в файле с именем notification_mailer.rb.

Есть ли способ, которым я могу по-разному вызывать разные методы в зависимости от строки? (она же строковая переменная как часть вызова метода).

Например: я знаю, что могу

NotificationMailer.send("#{email_type}_email", user.id)

звонить

NotificationMailer.welcome_email(user.id)/NotificationMailer.banned_email(user.id)/NotificationMailer.upgrade_email(user.id)

но как мне позвонить (добавляя часть задержки)

Notification.delay.welcome_email(user.id) ?

Могу я просто сделать NotificationMailer.delay.send("#{email_type}_email", user.id)?


person rlhh    schedule 01.07.2013    source источник


Ответы (1)


Предполагая, что у вас есть объект NotificationMailer, который является ActionMailer с множеством различных методов уведомления, каждый из которых принимает пользователя, вы можете написать простое задание Sidekiq для отправки ваших электронных писем в фоновом режиме:

class NotificationWorker
  include Sidekiq::Worker

  def perform(notification_type, user_id)
    user = User.find(user_id)
    NotificationMailer.send(notification_type, user).deliver
  end
end

Теперь, когда у вас есть это, вы можете поставить в очередь асинхронное уведомление по электронной почте, вызвав это задание:

NotificationWorker.perform_async('welcome_email', user.id)
person Winfield    schedule 06.08.2013