Sidekiq Delayed Mailer dengan nama metode variabel

Hanya untuk beberapa konteks: Saya memiliki 3 metode berbeda yang disebut selamat datang_email(user_id), banned_email(user_id) dan upgrade_email((user_id) dalam file bernama notification_mailer.rb.

Apakah ada cara agar saya dapat memanggil metode yang berbeda secara berbeda berdasarkan string? (alias variabel string sebagai bagian dari pemanggilan metode).

Misalnya: Saya tahu saya bisa melakukannya

NotifikasiMailer.kirim("#{email_type}_email", pengguna.id)

memanggil

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

tapi bagaimana cara meneleponnya (menambahkan di bagian penundaan)

Notifikasi.delay.welcome_email(user.id) ?

Bolehkah saya melakukan NotificationMailer.delay.send("#{email_type}_email", user.id) saja?


person rlhh    schedule 01.07.2013    source sumber


Jawaban (1)


Dengan asumsi Anda memiliki objek NotifikasiMailer yang merupakan ActionMailer dengan beragam metode notifikasi berbeda yang masing-masing memerlukan pengguna, Anda dapat menulis tugas Sidekiq sederhana untuk mengirim email Anda di latar belakang:

class NotificationWorker
  include Sidekiq::Worker

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

Sekarang setelah Anda memilikinya, Anda dapat memasukkan email pemberitahuan asinkron dengan memanggil pekerjaan itu:

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