2013-07-10 26 views
7

Was ich brauche:Vor-Filter in Aktion Mailer Rails 3

Etwas Ähnliches in Action before_filter in Rails 3.

Problem:

Ich arbeite an Rails 3 und möchte einen before_filter in ActionMailer haben. Überprüft die actionmailer api und lernte von vor und rückwirkend Callbacks. Nach der Implementierung gibt es den Fehler:

NoMethodError: undefined method `before_action' for Notifier:Class 

Später erfuhr, dass es keine zuvor für Rails Aktion Anruf 3 von diesem post

Isnt es irgendwelche Haken oder ein Edelstein, so dass wir etwas Ähnliches wie before_filter in Rails haben 3.

Bitte helfen. Danke vielmals!!

Antwort

10

Es kann durch die Einbeziehung von AbstractController :: Callbacks erreicht werden. Dies ahmt den Wechsel zu Rails 4 nach, der abgesehen von Kommentaren und Tests nur Callbacks enthielt.

class MyMailer < ActionMailer::Base 
    include AbstractController::Callbacks 

    after_filter :check_email 

    def some_mail_action(user) 
    @user = user 
    ... 
    end 

    private 
    def check_email 
    if @user.email.nil? 
    message.perform_deliveries = false 
    end 
    true 
    end 

end 

Referenz - How to add a before_filter in UserMailer which checks if it is OK to mail a user?

+2

Warnung, auf Schienen 3 (verifiziert diese w/Action 3.2.21), ruft Action :: Base # erneut Mail "Mail" in Ihrem after_filter aufrufen. "mail", wie ab 3.2.21, ist nicht dafür gedacht, wiederholt aufgerufen zu werden: einige der Informationen, die Sie beim ersten Mal übergeben haben, sind z. B. klebrig (Körper), andere nicht (z. B. Betreff). Es ist sicherer und zuverlässiger, auf "Nachricht" statt auf "Mail" zu verweisen. In dem obigen Fall wird "mail.perform_deliveries = false" die Aufgabe erledigen lassen (verhindert, dass die Mail ausgeht), aber es hat auch Nebeneffekte (setzt das Subjekt auf den Standard zurück usw.). – Benissimo