2014-11-08 14 views
8

W poniższej klasie, w jaki sposób uzyskać nazwę bieżącego działania (tj email_confirmation, password_reset) w boku after_action zwrotna add_mandril_headers?Jak uzyskać nazwę działania w filtrze after_action dla ActionMailer

class UserMailer < ActionMailer::Base 

    after_action :add_mandril_headers 

    def email_confirmation(user) 
    mail(..) 
    end 

    def password_reset(user) 
    mail(..) 
    end 

private 

    # how to get the action name? 
    def add_mandrill_headers 
    headers['X-MC-Tags'] = [mailer_name, action_name].join('_'); 
    end 
end 

Odpowiedz

13

Okazuje się, że action_name zwraca bieżącą nazwę akcji mailera. Próbowałem go na podstawie faktu, że ActionController ma podobną metodę.

0

Dzięki @HarishShetty!

Jak już wspomniano, action_name jest dobre dla wszystkich kontrolerów, ponieważ jest odziedziczone po ApplicationController.

Na przykład, używałem public_activity i chciał trochę uproszczenie moich kontrolerami:

class SiteDetailsController < ApplicationController 

    after_action :track_activity, only: [:create, :update, :destroy] 

    # ... 

    private 

    def track_activity 
    @site_detail.create_activity action_name, owner: current_user 
    end 
end 
+0

Tak, to dlaczego powiedziałem 'Próbowałem go na podstawie faktu, że ActionController ma podobną method.' –