56 votes

Accéder aux aides à partir du mailer ?

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

J'ai placé l'aide :application dans ma classe mailer, ce qui semble fonctionner, sauf que les méthodes qui y sont définies ne sont pas disponibles pour mon mailer (je reçois des erreurs non définies). Quelqu'un sait-il comment cela est censé fonctionner ?

Voici ma classe :

class CommentMailer < ActionMailer::Base
  default :from => "Andre Fournier <andre@gfournier.com>"

  helper :application
end

Merci, Sean

0 votes

Pouvez-vous également inclure votre code et la définition de votre méthode pour obtenir l'utilisateur actuel ?

0 votes

Bien sûr, c'est ici (la référence dans le courrier) : :from => "#{current_sender.name} <#{current_sender.email}>" et la définition : def current_sender current_user end

0 votes

Je veux dire, avez-vous current_user défini dans une méthode d'aide ou dans le contrôleur de votre application et si oui, quelle est la définition ?

72voto

William Denniss Points 3781

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

add_template_helper(ApplicationHelper)

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

1 votes

Travaux ! @Sean O'Hara - Vous n'acceptez pas cette réponse ?

0 votes

J'ai dû inclure ::ApplicationHelper avant add_template_helper(ApplicationHelper).

3 votes

Pour les rails 4+, vous pouvez également faire helper ApplicationHelper

65voto

Josh Pinter Points 3814

Utilice helper ApplicationHelper

class NotificationsMailer < ActionMailer::Base

  default from: "Community Point <Team@CommunityPoint.ca>"
  helper ApplicationHelper
  helper NotificationMailerHelper

  # ...other code...

NOTE : Ces méthodes d'aide sont uniquement disponible pour les vues . Ils ne sont pas disponibles dans la classe des expéditeurs ( NotificationMailer dans mon exemple).

Si vous en avez besoin dans la classe d'expéditeur actuelle, utilisez include ApplicationHelper comme ça :

class NotificationMailer < ActionMailer::Base

  include ApplicationHelper

  # ... the rest of your mailer class.

end

De cette autre question sur le SO .

13 votes

Il est important de savoir que ces méthodes d'aide ne sont pas disponibles dans la classe mailer ( NotificationMailer dans mon exemple), mais seulement aux vues elles-mêmes. Si vous en avez besoin dans la classe mailer elle-même, vous devriez pouvoir utiliser include ApplicationHelper à la place.

26voto

Questor Points 138

C'est une très vieille question, 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 qui ont été définies dans le module d'aide. S'il s'agit de 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 la version 3.2.13, vous devez utiliser la fonction

extend ApplicationHelper

si une méthode d'instance

include ApplicationHelper

et si vous voulez les utiliser dans une vue de mailer

helper ApplicationHelper

0 votes

Merci pour cela ! !! Je n'ai aucun moyen de marquer ceci comme une réponse. - Est-ce que les modules extend / include / helper sont amortissables, c'est-à-dire que l'utilisation de extend couvre include et helper ?

7voto

dangerousdave Points 2019

Vous pouvez essayer d'intégrer le module d'aide requis :

class CommentMailer < ActionMailer::Base
  include ApplicationHelper
end

2 votes

Je ne suis pas sûr que cela fonctionne à partir des vues. Je pense que non. Mais cela fonctionnera certainement si vous voulez utiliser les aides dans la classe mailer elle-même.

4voto

B Seven Points 6496

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

Quoi es nécessaire est 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'aide doivent correspondre et être correctement orthographiés.

Rails 3.2.2

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X