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

Send email before destroy User, Rails 5

我试图在我的用户对象被销毁之前挂钩一个邮件程序。

我正在使用 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

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

有什么想法吗?

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

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