Je souhaite utiliser les méthodes que j'ai définies app/helpers/annotations_helper.rb
dans mes vues ReportMailer ( app/views/report_mailer/usage_report.text.html.erb
). Comment puis-je faire cela?
Sur la base de ce guide, il semble que la add_template_helper(helper_module)
méthode puisse faire ce que je veux, mais je ne sais pas comment l'utiliser.
(BTW, y a-t-il une raison pour laquelle vous avez accès à un ensemble différent d'aides dans les vues des expéditeurs?
ruby-on-rails
Tom Lehman
la source
la source
Réponses:
Dans la classe de messagerie que vous utilisez pour gérer vos e-mails:
la source
Dans Rails 3, utilisez simplement la méthode d'assistance en haut de votre classe ActionMailer:
Je viens de passer dans un bloc, car je n'en ai besoin que dans le seul Mailer:
(assurez-vous de définir config.action_mailer.default_url_options.)
(et si vous utilisez url_for, assurez-vous de transmettre: only_path => false)
la source
helper :'namespace/mail'
helper 'namespace/mail'
Pour tous les expéditeurs dans Rails 3 (configuration de l'aide "application"):
la source
helper :application
fonctionne très bien dans Rails 4.2.1.devise
.helper :application
ne fonctionne pas dans ce cas.include ApplicationHelper
a fonctionnéPour Ruby on Rails 4, j'ai dû faire 2 choses:
(1) Comme Duke l'a déjà dit, si l'aide que vous souhaitez ajouter est
UsersHelper
par exemple, alors ajoutezà la
ActionMailer
classe dérivée (par exempleapp/mailers/user_mailer.rb
)(2) Après cela, j'ai eu une nouvelle erreur:
Pour résoudre ce problème, ajoutez la ligne
à chacun des
config/environments/*.rb
fichiers. Pourconfig/environments/production.rb
, remplacezlocalhost
par un hôte plus approprié pour les URL générées par l'aide à la production.Q: Pour le numéro 2, pourquoi la vue de messagerie a-t-elle besoin de ces informations et les vues normales non?
R: Parce que les vues régulières n'ont pas besoin de connaître
host
, car tous les liens générés sont servis depuis l'hôte vers lequel ils se connectent. Les liens qui apparaissent dans les e-mails ne sont pas servis à partir du même hôte (sauf si vous vous connectez àhotmail.com
ougmail.com
, etc.)la source
User::ComposedHelper
Vous pouvez simplement ajouter votre mailer
ou l'aide dont vous avez besoin
la source
(C'est une vieille question mais Rails a évolué, donc je partage ce qui fonctionne pour moi dans Rails 5.2.)
En règle générale, vous souhaiterez peut-être utiliser un assistant d'affichage personnalisé pour afficher la ligne d'objet d'un e-mail ainsi que le code HTML. Dans le cas où l'assistant de vue se trouve dans app / helpers / application_helper.rb comme suit:
Je peux créer une ligne d'objet et un modèle d'e-mail dynamiques qui utilisent tous deux l'aide, mais je dois dire à Rails d'utiliser explicitement ApplicationHelper dans apps / mailer / user_mailer.rb de deux manières différentes, comme vous pouvez le voir dans les deuxième et troisième lignes ici :
Je dois mentionner que ces deux lignes fonctionnent tout aussi bien, alors choisissez l'une ou l'autre:
FWIW, le modèle d'e-mail à app / views / user_mailer / party_thanks.html.erb ressemble à ceci:
Et le contrôleur app / controller / party_controller.rb ressemble à ceci
Je dois être d'accord avec OP (@Tom Lehman) et @gabeodess que tout cela semble assez compliqué compte tenu de https://guides.rubyonrails.org/action_mailer_basics.html#using-action-mailer-helpers alors peut-être que je manque quelque chose .. .
la source
dans mon cas pour Rails4, j'aime ça:
et
afin que vous n'ayez pas à spécifier
add_template_helper
partout.la source