J'ai plusieurs modèles Devise dans mon application (utilisateur, administrateur, etc.). Je peux envoyer des e-mails de notification Devise de manière asynchrone en remplaçant #send_devise_notification dans chacun des modèles.Modèles DRY Devise qui doivent envoyer des e-mails de manière asynchrone
# user.rb, admin.rb, etc
private
##
# Uses Active::Job to send Devise's emails asynchronously.
##
def send_devise_notification(notification, *args)
devise_mailer.send(notification, self, *args).deliver_later
end
Puisque ce code est exactement le même dans tous les modèles, je pensais que je pouvais faire une préoccupation appelée DeviseAsyncCapable qui met en œuvre #send_devise_notification la même manière que je décris ci-dessus.
# devise_async_capable.rb
module DeviseAsyncCapable
extend ActiveSupport::Concern
def send_devise_notification(notification, *args)
devise_mailer.send(notification, self, *args).deliver_later
end
end
# user.rb
class User < ActiveRecord::Base
include DeviseAsyncCapable
end
Après y compris la préoccupation dans l'un des modèles et de le tester, la méthode définie dans le souci n'a pas été appelé, au lieu des e-mails en ligne envoyé Devise. Comment puis-je sécher ce code?
Inclure DeviseAsyncCapable après 'concevoir: database_autheticable' – bcd