Sidekiq Delayed Mailer พร้อมชื่อวิธีการแบบตัวแปร

สำหรับบริบทบางอย่าง: ฉันมี 3 วิธีที่แตกต่างกันที่เรียกว่าwelcome_email(user_id),bann_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)

แต่จะโทรยังไงครับ (เพิ่มในส่วนของดีเลย์)

การแจ้งเตือน.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