2010-09-10 20 views
21

Tengo un método que toma una matriz de cadenas y se une a ellos para que hagan algo como esto:¿Dónde pongo métodos de ayuda para las vistas de ActionMailer?

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

¿Qué me gustaría que mi programa de correo para tener acceso a lo que puede dar salida a una cierta información en un correo electrónico. Parece que no puedo encontrar un buen lugar para ponerlo y ponerlo en el archivo application_helper.rb y no lo encuentra allí. ¿A dónde debería ir?

+3

Vale la pena mirar el método de extensión 'to_sentence' para las matrices que los rieles proporcionan. – Shadwell

+0

@Shadwell, publica eso como respuesta y lo +1. Eso es exactamente lo que estaba buscando. – DJTripleThreat

+0

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

Respuesta

62

utilizar el método de helper en su programa de correo para definir la clase de ayuda para utilizar

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

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

continuación, puede utilizar los métodos de puntos de vista también.

+0

¡Impresionante, eso funcionó! – DJTripleThreat

+4

Genial. Agregue 'include MailerHelper' a' MyMailer

10

Valdría la pena mirar el método de extensión to_sentence para matrices proporcionadas por rieles.

+0

+1 Gracias por ese consejo. – DJTripleThreat

4

1, funcionó bien, sólo un poco de corrección:

Usted tiene que usar módulo en lugar de clase en el archivo de ayuda:

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

Una pregunta ya contestada, pero no obtuvo dónde/qué archivo modificar de las otras respuestas SO. Aquí es cómo lo hice:

En la parte inferior de la app/config/inicializadores/devise.rb se puede añadir lo siguiente:

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

En este ejemplo se incluirá en los métodos/app/helpers/application_helper. rb. Podría incluir otro archivo auxiliar en su lugar, si, por ejemplo, el método es solo para el programa de correo o solo para otro controlador. La definición que necesitaba se usa en todas partes, así que puse ese archivo para que todas las vistas puedan acceder a él.

0

En mi caso, por Rails 5.1, tuve que usar ambos incluyen y métodos de ayuda, así:

include ApplicationHelper 
helper :application 

Y luego simplemente proceder a utilizar el método normalmente.

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

    def my_mailer_method 
    my_helper_method_declared_in_application_helper 
    .. 
    end 
end 
Cuestiones relacionadas