我试图在我的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
告别用户邮件永远不会发送。
有什么想法吗?
答案 0 :(得分:5)
这是因为您通过deliver_later
异步发送电子邮件。由于它是在一个单独的线程上,当工作者获得工作时,用户已经被销毁。
您可以同步发送电子邮件,也可以不使用before_destroy
回调。如果您想在后台发送电子邮件,只需拨打goodbye_user
方法并在那里销毁用户(在发送电子邮件后)。