2013-07-10 9 views
7

Co potrzebne:Przed filtr Action Mailer szyn 3

coś podobnego do before_filter w ActionMailer w Rails 3.

Problem:

pracuję nad Rails 3 i chcesz mieć before_filter w ActionMailer. Sprawdził numer actionmailer api i zapoznał się z callbackami before_action i after_action. Kiedy wdrożony daje błąd:

NoMethodError: undefined method `before_action' for Notifier:Class 

później dowiedziałem się, że nie ma przed wywołaniem działania na Rails 3 Z tego post

isnt tam jakiegokolwiek haka lub klejnotu tak, że możemy mieć coś podobnego jak before_filter w szynach 3.

Proszę o pomoc. Wielkie dzięki!!

Odpowiedz

10

Można to osiągnąć przez włączenie funkcji AbstractController :: Callbacks. To naśladuje zmianę do Rails 4, która oprócz komentarzy i testów, zawiera tylko Callbacki.

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 

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

+2

Warning, na szynach 3 (zweryfikowane to w/ActionMailer 3.2.21), nazywając "Poczta" w after_filter wywołuje ActionMailer :: Base # pocztę ponownie. "mail", jak w punkcie 3.2.21, nie jest przeznaczony do wielokrotnego wywoływania: niektóre informacje, które przekazałeś za pierwszym razem, będą lepkie (np. ciało), podczas gdy inne informacje nie będą (na przykład). Bezpieczniejsze i bardziej niezawodne jest odwoływanie się do "wiadomości" zamiast "mail". W powyższym przypadku "mail.perform_deliveries = false" wykonuje zadanie (zapobiega wychodzeniu poczty), ale ma również efekty uboczne (resetuje obiekt do domyślnego itd.). – Benissimo

Powiązane problemy