unidos robert productores mejores hollywood historia famosos estadounidense estados directores director cine actuales ruby-on-rails ruby-on-rails-3

ruby-on-rails - robert - mejores directores de la historia



¿Accede a los ayudantes desde el programa de correo? (11)

Use helper ApplicationHelper

class NotificationsMailer < ActionMailer::Base default from: "Community Point <[email protected]>" helper ApplicationHelper helper NotificationMailerHelper # ...other code...

NOTA: Estos métodos de ayuda solo están disponibles para las Vistas . No están disponibles en la clase de correo ( NotificationMailer en mi ejemplo).

Si los necesita en la clase de correo real, use include ApplicationHelper , así:

class NotificationMailer < ActionMailer::Base include ApplicationHelper # ... the rest of your mailer class. end

De esta otra pregunta SO .

Intenté acceder a los métodos de ayuda de un programa de correo de rails 3 para acceder al usuario actual de la sesión.

Puse la aplicación helper: en mi clase de correo, que parece funcionar, excepto que los métodos definidos en él no están disponibles para mi correo (recibo errores no definidos). ¿Alguien sabe cómo se supone que esto funciona?

Aquí está mi clase:

class CommentMailer < ActionMailer::Base default :from => "Andre Fournier <[email protected]>" helper :application end

Gracias, Sean


Esta es una pregunta muy antigua, pero no veo la respuesta completa, así que lo intentaré porque no encontré otro recurso.

Depende de lo que esté haciendo con los métodos que se han definido en el módulo auxiliar. Si son métodos de clase, y todo lo que no se llama en una instancia específica parece ser un método de clase para 3.2.13, debe usar

extend ApplicationHelper

si los métodos de una instancia

include ApplicationHelper

y si quieres usarlos en una vista de correo

helper ApplicationHelper


La respuesta de Josh Pinter es correcta, pero descubrí que no es necesaria.

Lo que es necesario es nombrar al ayudante correctamente.

NotificationMailerHelper es correcto. NotificationMailersHelper (tenga en cuenta la s) no es correcto.

La clase y el nombre del asistente deben coincidir y escribirse correctamente.

Rieles 3.2.2


La versión de método único de promoción de un método para ser un ayudante que está disponible en ApplicationController también funciona en ActionMailer:

class ApplicationMailer < ActionMailer::Base helper_method :marketing_host def marketing_host "marketing.yoursite.com" end end

desde allí puede llamar a marketing_host desde cualquiera de sus vistas de correo


Ninguno de los *_path helpers son accesibles por defecto dentro de un correo electrónico. En su lugar, es necesario utilizar la forma *_url del ayudante deseado. Entonces, por ejemplo, en lugar de usar user_path(@user) es necesario usar user_url(@user) . Consulte los conceptos básicos de Action Mailer .


No estoy seguro exactamente de lo que está haciendo aquí, pero cuando quiero acceder a current_user desde un programa de correo, hago un método de envío de correos al que le paso el usuario como argumento:

class CommentMailer < ActionMailer::Base default :from => "Andre Fournier <[email protected]>" def blog_comment(user) @recipients = user.email @from = "[email protected]" @sent_on = Time.now @timestamp = Time.now @user = user end end

Con lo anterior, se puede acceder a @user, así como a todas las otras variables de instancia, desde el interior de las vistas de correo ./views/comment_mailer/blog_comment.html.erb y ./views/comment_mailer/blog_comment.text.erb

Por separado, puede hacer que se llame a un ayudante

comment_mailer_helper.rb

y ponga en ese helper cualquier método que quiera que esté disponible para las vistas de su correo. Esto me parece más como lo que podría querer, con respecto a los ayudantes, porque los ayudantes están diseñados para ayudar a las vistas, mientras que un anuncio publicitario es análogo a un controlador.


Para permitirle acceder a los ayudantes de aplicaciones desde las vistas de ActionMailer, intente agregar esto:

add_template_helper(ApplicationHelper)

Para su ActionMailer (justo debajo de su default :from línea).


Podría intentar mezclar en el módulo auxiliar requerido:

class CommentMailer < ActionMailer::Base include ApplicationHelper end


Si desea llamar al método de ayuda desde ActionMailer, debe incluir helper (módulo) en el archivo de Mailer como, si el nombre del módulo de Ayuda es "UserHelper", luego debe escribir lo siguiente en el archivo de Mailer.

class CommentMailer < ActionMailer::Base default :from => "Andre Fournier <[email protected]>" add_template_helper(UserHelper) end

O

class CommentMailer < ActionMailer::Base default :from => "Andre Fournier <[email protected]>" include UserHelper end

Espero que esto sea útil.


Un medio peligroso para lograr lo que quería es almacenar los objetos que necesito (current_user.name + current_user.email) en atributos de hilos, como los siguientes: Thread.current[:name] = current_user.name . Luego, en mi programa de correo, acabo de asignar nuevas variables de instancia a los valores almacenados en el hilo: @name = Thread.current[:name] . Esto funciona, pero no funcionará si se usa algo como trabajo retrasado.


include ActionView::Helpers::TextHelper trabajado para mí en el controlador de Mailer (archivo .rb). Esto me permitió usar el asistente de pluralización en una acción de controlador de Mailer (los ayudantes funcionaron bien desde el principio en las vistas de Mailer). Ninguna de las otras respuestas funcionó, al menos no en Rails 4.2