Sidekiq Delayed Mailer,方法名称可变

时间:2013-07-01 02:20:10

标签: ruby-on-rails-3 actionmailer sidekiq

仅针对某些情况: 我在名为notification_mailer.rb的文件中有3种不同的方法,名为welcome_email(user_id),banned_email(user_id)和upgrade_email((user_id)。

有没有办法可以根据字符串不同地调用不同的方法? (也称为字符串变量,作为方法调用的一部分)。

例如: 我知道我可以做到

  

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)吗?

1 个答案:

答案 0 :(得分: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)