2010-09-10 7 views
21

Ich habe eine Methode, die ein Array von Strings und schließt sich ihnen nimmt, so tun sie so etwas wie dieses:Wo gebe ich Hilfsmethoden für ActionMailer Ansichten an?

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

Was ich meine Mailer möchte den Zugang zu haben, um so kann ich Ausgabe einige Informationen in einer E-Mail. Ich finde nicht, dass ich einen guten Platz finde, um es in die Datei application_helper.rb zu schreiben und es dort nicht zu finden. Wohin soll es gehen?

+3

Es lohnt sich, die 'to_sentence'-Erweiterungsmethode für Arrays zu betrachten, die rails bereitstellt. – Shadwell

+0

@Shadwell, post als Antwort und ich werde es +1. Genau das habe ich gesucht. – DJTripleThreat

+0

ähnlich einem - http://amolnpujari.wordpress.com/2013/12/27/highlight-changes-being-made-on-active-record-object-inside-mail/ –

Antwort

62

die helper Methode in Ihrem Mailer Verwenden Sie die Hilfsklasse definieren

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

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

dann können Sie die Methoden in Ansichten verwenden und verwenden.

+0

Ehrfürchtig, das hat funktioniert! – DJTripleThreat

+4

Großartig. Fügen Sie 'My Mailer

10

Es würde sich lohnen, die Erweiterungsmethode to_sentence für Arrays zu betrachten, die Schienen zur Verfügung stellt.

+0

+1 Danke für diesen Tipp. – DJTripleThreat

4

+1, hat gut funktioniert, nur ein wenig Korrektur:

Sie haben Modul verwenden statt Klasse in der Hilfsdatei:

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

Eine bereits beantworteten Frage, aber ich Die wo/was-Datei wurde von den anderen SO-Antworten nicht geändert. Hier ist, wie ich es tat:

Am Ende der app/config/initializers/devise.rb Sie diese hinzufügen:

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

In diesem Beispiel werden die Methoden in/app/Helfer/application_helper enthalten. rb. Sie könnten stattdessen eine andere Hilfedatei hinzufügen - wenn die Methode beispielsweise nur für den Mailer oder nur für einen anderen Controller verwendet wird. Das Def, das ich brauchte, wird überall verwendet, also habe ich diese Datei eingefügt, damit alle Ansichten darauf zugreifen können.

0

In meinem Fall für Rails 5.1, hatte ich beide zu verwenden sind und Hilfsmethoden, wie folgt aus:

include ApplicationHelper 
helper :application 

Und dann gehen Sie einfach normalerweise die Methode zu verwenden.

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

    def my_mailer_method 
    my_helper_method_declared_in_application_helper 
    .. 
    end 
end 
Verwandte Themen