在销毁User,Rails 5之前发送电子邮件

时间:2017-03-10 19:40:19

标签: ruby-on-rails email sidekiq rails-activejob

我试图在我的User对象被销毁之前挂钩邮件。

我正在使用Sidekiq发送电子邮件,但是当用户被销毁时会出现此错误。

ActiveJob::DeserializationError: Error while trying to deserialize arguments: Couldn't find User with id [id]

在我的模型中,我有这个:

class User < ApplicationRecord
  before_destroy :goodbye_user

  devise :database_authenticatable, :registerable,
     :recoverable, :rememberable, :trackable, :validatable, :confirmable, :lockable

  private

  def send_devise_notification(notification, *args)
    devise_mailer.send(notification, self, *args).deliver_later
  end

  def goodbye_user
    GoodbyeUser.goodbye_user(self).deliver_later
  end

end

告别用户邮件永远不会发送。

有什么想法吗?

1 个答案:

答案 0 :(得分:5)

这是因为您通过deliver_later异步发送电子邮件。由于它是在一个单独的线程上,当工作者获得工作时,用户已经被销毁。

您可以同步发送电子邮件,也可以不使用before_destroy回调。如果您想在后台发送电子邮件,只需拨打goodbye_user方法并在那里销毁用户(在发送电子邮件后)。