2010-09-10 9 views
21

Mam metodę, która pobiera tablicę ciągów i łączy je tak robią coś takiego:Gdzie umieszczam metody pomocnicze dla widoków ActionMailer?

>> my_arr 
=> ["A", "B", "C"] 
>> and_join(my_arr) 
=> "A, B, and C" 

które chciałbym moją przesyłkę, aby mieć dostęp do tak mogę wyjście niektóre informacje do wiadomości e-mail. Nie mogę znaleźć dobrego miejsca na umieszczenie go i umieszczenie go w pliku application_helper.rb, ale go tam nie ma. Gdzie powinien iść?

+3

Warto przyjrzeć się metodzie rozszerzenia 'to_sentence' dla tablic dostarczanych przez szyny. – Shadwell

+0

@ Shadwell, zaksięguj to jako odpowiedź, a ja daję +1. Właśnie tego szukałem. – DJTripleThreat

+0

podobny - http://amolnpujari.wordpress.com/2013/12/27/highlight-changes-being-made-on-activerecord-object-inside-mail/ –

Odpowiedz

62

Użyj metody helper w program pocztowy, aby zdefiniować klasę pomocniczą używać

# mailer_helper.rb 
module MailerHelper 
    def and_join(arr) 
    # whatever … 
    end 
end 

# my_mailer.rb 
class MyMailer < ActionMailer::Base 
    helper MailerHelper 
    … 
end 

następnie można użyć metod w widokach, jak również.

+0

Awesome, that worked! – DJTripleThreat

+4

Świetnie. Dodaj 'include MailerHelper' do' MyMailer

10

Warto byłoby przyjrzeć się metodzie rozszerzania to_sentence dla tablic dostarczanych przez szyny.

+0

+1 Dzięki za tę wskazówkę. – DJTripleThreat

4

+1, pracował w porządku, tylko trochę korekta

Musisz użyć moduł zamiast klasy w pliku pomocnika:

# mailer_helper.rb 
module MailerHelper 
    def and_join(arr) 
    # whatever … 
    end 
end 
4

już odpowiedział na pytanie, ale ja nie dostałem gdzie/co-plik do modyfikacji z innych odpowiedzi SO. Oto jak to zrobiłem:

Na dole app/config/inicjalizatory/devise.rb można dodać to:

Devise::Mailer.class_eval do 
    helper :application # includes "ApplicationHelper" 
end 

Przykład ten obejmie metody w/app/pomocników/application_helper. rb. Zamiast tego można dołączyć inny plik pomocnika - jeśli na przykład metoda dotyczy tylko programu pocztowego lub jest używana tylko dla jednego kontrolera. Def, którego potrzebowałem, jest używany wszędzie, więc umieszczam w tym pliku, aby wszystkie widoki mogły uzyskać do niego dostęp.

0

W moim przypadku, na Rails 5.1, musiałem użyć zarówno to i metody pomocnicze, na przykład:

include ApplicationHelper 
helper :application 

A potem po prostu przejść do użyć metody normalnie.

class MyMailer < ActionMailer::Base 
    include ApplicationHelper 
    helper :application 

    def my_mailer_method 
    my_helper_method_declared_in_application_helper 
    .. 
    end 
end