2017-07-21 17 views
0

私のアプリには複数のDeviseモデル(ユーザー、管理者など)があります。各モデルの#send_devise_notificationをオーバーライドすることで、Devise通知メールを非同期で正常に送信できます。DRY電子メールを非同期で送信する必要があるDevitsモデル

# 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 

このコードはモデルのすべてでまったく同じですので、私は上記のように同じよう#send_devise_notification実装DeviseAsyncCapableと呼ばれる懸念を作ることができ考え出し。

# 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 

は、モデルの一つに懸念を含む、それをテストした後、懸念に規定された方法ではなく工夫が電子メールをインラインで送信され、呼び出されませんでした。このコードをどのようにDRYできますか?

+1

が工夫 '後DeviseAsyncCapableを含める:database_autheticable' – bcd

答えて

0

アップデート - BCDは答えとして、あなたが工夫呼び出した後懸念を含める必要が

回答:database_autheticable

#user.rb 
class User < ActiveRecord::Base 
    devise :database_authenticatable#, ... 

    include DeviseAsyncCapable 
end 
関連する問題