2013-07-01 41 views
0

只是爲了一些背景: 我有3種叫welcome_email(USER_ID)不同的方法,banned_email在一個名爲notification_mailer.rb文件(USER_ID)和upgrade_email((USER_ID)Sidekiq延遲梅勒與變量法名

是否有這樣,我可以基於字符串不同調用不同的方法(也就是一個字符串變量作爲方法調用的一部分)

例如:? 我知道我可以做

NotificationMailer.send( 「#{email_t YPE} _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

假設你有一個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)