J'ai essayé d'accéder à des méthodes d'assistance à partir d'un programme de messagerie Rails 3 afin d'accéder à l'utilisateur actuel pour la session.
Je mets l'assistant: application dans ma classe mailer, ce qui semble fonctionner, sauf que les méthodes 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 < ActionMailer::Base
default :from => "Andre Fournier <[email protected]>"
helper :application
end
Merci, Sean
Pour vous permettre d'accéder aux aides d'application à partir des vues ActionMailer, essayez d'ajouter ceci:
add_template_helper(ApplicationHelper)
À votre ActionMailer (juste en dessous de votre ligne default :from
).
helper ApplicationHelper
class NotificationsMailer < ActionMailer::Base
default from: "Community Point <[email protected]>"
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 mailer (NotificationMailer
dans mon exemple).
Si vous en avez besoin dans la classe de publipostage, utilisez include ApplicationHelper
, comme suit:
class NotificationMailer < ActionMailer::Base
include ApplicationHelper
# ... the rest of your mailer class.
end
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 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éthode d'instance
include ApplicationHelper
et si vous voulez les utiliser dans une vue mailer
helper ApplicationHelper
Vous pouvez essayer de mélanger le module d'aide requis:
class CommentMailer < ActionMailer::Base
include ApplicationHelper
end
include ActionView::Helpers::TextHelper
a travaillé pour moi dans le contrôleur de courrier (fichier .rb). Cela m'a permis d'utiliser l'assistant de pluriel dans une action du contrôleur Mailer (les helpers fonctionnaient bien dès le début dans les vues Mailer). Aucune des autres réponses n'a fonctionné, du moins pas sur Rails 4.2
La réponse de Josh Pinter est correcte, mais j'ai découvert que ce n'était pas nécessaire.
Ce queestnécessaire est de nommer correctement l’assistant.
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
La version à méthode unique de promotion d’une méthode en tant qu’assistant 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 l’une de vos vues de publipostage
Si vous souhaitez appeler une méthode d'assistance à partir d'ActionMailer, vous devez inclure helper (module) dans le fichier courrier en tant que, si le nom du module d'assistance est «UserHelper», vous devez écrire ce qui suit dans le fichier courrier
class CommentMailer < ActionMailer::Base
default :from => "Andre Fournier <[email protected]>"
add_template_helper(UserHelper)
end
Ou
class CommentMailer < ActionMailer::Base
default :from => "Andre Fournier <[email protected]>"
include UserHelper
end
J'espère que c'est utile.
Je ne sais pas exactement ce que vous faites ici, mais lorsque je veux accéder à current_user à partir d'un mailer, je crée une méthode de mailing à laquelle je passe l'utilisateur en argument:
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
Avec ce qui précède, @user, ainsi que toutes les autres variables d'instance, sont accessibles depuis les vues de l'éditeur ./views/comment_mailer/blog_comment.html.erb et ./views/comment_mailer/blog_comment.text.erb
Séparément, vous pouvez créer un assistant appelé
comment_mailer_helper.rb
et mettez dans cette aide toutes les méthodes que vous voulez être disponibles pour les vues de votre expéditeur. Cela me semble plus comme ce que vous voudriez peut-être, en ce qui concerne les aides, car les aides sont conçues pour aider les vues, alors qu'un mailer est analogue à un contrôleur.
Aucun des assistants *_path
n'est accessible par défaut dans un courrier électronique. Au lieu de cela, il est nécessaire d’utiliser la forme *_url
de l’assistant demandé. Ainsi, par exemple, au lieu d’utiliser user_path(@user)
, il est nécessaire d’utiliser user_url(@user)
. Voir à la page Principes de base de l’Action Mailer .