Accéder aux aides de mailer?

J’ai essayé d’accéder à des méthodes d’assistance à partir d’un mailer rails 3 afin d’accéder à l’utilisateur actuel pour la session.

J’ai mis l’aide: application dans ma classe de mailer, qui semble fonctionner, sauf que les méthodes qui y sont définies ne sont pas disponibles pour mon mailer (j’obtiens des erreurs non définies). Est-ce que quelqu’un sait comment cela est censé fonctionner?

Voici ma classe:

class CommentMailer  "Andre Fournier " helper :application end 

Merci Sean

Pour vous permettre d’accéder aux aides d’application à partir des vues ActionMailer, essayez d’append ceci:

 add_template_helper(ApplicationHelper) 

Pour votre ActionMailer (juste sous votre default :from ligne).

Utiliser l’ helper ApplicationHelper

 class NotificationsMailer < ActionMailer::Base default from: "Community Point " helper ApplicationHelper helper NotificationMailerHelper # ...other code... 

REMARQUE: ces méthodes d’assistance sont uniquement disponibles pour les vues . Ils ne sont pas disponibles dans la classe de messagerie ( NotificationMailer dans mon exemple).

Si vous en avez besoin dans la classe mailer, utilisez include ApplicationHelper , comme ceci:

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

De cette autre question SO .

C’est une question très ancienne, mais je ne vois pas la réponse complète, alors je vais essayer car je n’ai pas trouvé d’autre ressource.

Cela dépend de ce que vous faites avec les méthodes définies dans le module d’assistance. Si ce sont des méthodes de classe, et que tout ce qui n’est pas appelé sur une instance spécifique semble être une méthode de classe pour 3.2.13, vous devez utiliser

 extend ApplicationHelper 

si une méthodes d’instance

 include ApplicationHelper 

et si vous souhaitez les utiliser dans une vue mailer

 helper ApplicationHelper 

Vous pouvez essayer de mélanger le module d’aide requirejs:

 class CommentMailer < ActionMailer::Base include ApplicationHelper end 

La réponse de Josh Pinter est correcte, mais j’ai découvert que ce n’était pas nécessaire.

Il est nécessaire de nommer l’aide correctement.

NotificationMailerHelper est correct. NotificationMailersHelper (notez le s) n’est pas correct.

La classe et le nom de fichier de l’assistant doivent correspondre et être correctement orthographiés.

Rails 3.2.2

include ActionView::Helpers::TextHelper travaillé pour moi dans le contrôleur Mailer (fichier .rb). Cela m’a permis d’utiliser l’assistant pluralize dans une action du contrôleur Mailer (les assistants fonctionnaient correctement dès le départ dans les vues Mailer). Aucune des autres réponses n’a fonctionné, du moins pas sur Rails 4.2

Si vous souhaitez appeler la méthode d’assistance depuis ActionMailer, vous devez inclure l’aide (module) dans le fichier Mailer, si le nom du module d’aide est «UserHelper», vous devez alors écrire dans le fichier Mailer.

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

Ou

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

J’espère que c’est utile.

La version de méthode unique de promotion d’une méthode pour qu’elle soit une aide disponible dans ApplicationController fonctionne également dans ActionMailer:

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

à partir de là, vous pouvez appeler marketing_host partir de n'importe laquelle de vos vues

Je ne sais pas exactement ce que vous faites ici, mais quand je veux accéder à current_user à partir d’un mailer, je crée une méthode de messagerie à laquelle je passe l’utilisateur en argument:

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

Avec ce qui précède, @user, ainsi que toutes les autres variables d’instance, sont accessibles depuis les vues du mailer ./views/comment_mailer/blog_comment.html.erb et ./views/comment_mailer/blog_comment.text.erb

Séparément, vous pouvez faire un assistant appelé

comment_mailer_helper.rb

et mettre dans cette aide toutes les méthodes que vous souhaitez être disponible pour les vues de votre expéditeur. Cela me semble plus comme ce que vous voudriez, concernant les assistants, car les assistants sont conçus pour aider les vues, tandis qu’un mailer est analogue à un contrôleur.

Aucun des helpers *_path n’est accessible par défaut dans un email. Il est nécessaire d’utiliser *_url forme *_url de l’assistant recherché. Ainsi, par exemple, au lieu d’utiliser user_path(@user) il est nécessaire d’utiliser user_url(@user) . Voir les bases de Action Mailer .

Un moyen piquant de réaliser ce que je voulais est de stocker les objects dont j’ai besoin (current_user.name + current_user.email) dans des atsortingbuts de thread, comme ceci: Thread.current[:name] = current_user.name . Ensuite, dans mon mailer, je viens d’atsortingbuer de nouvelles variables d’instance aux valeurs stockées dans le thread: @name = Thread.current[:name] . Cela fonctionne, mais cela ne fonctionnera pas si vous utilisez quelque chose comme un travail différé.