Ich möchte die Methoden verwenden, die ich app/helpers/annotations_helper.rb
in meinen ReportMailer-Ansichten ( app/views/report_mailer/usage_report.text.html.erb
) definiert habe. Wie mache ich das?
Basierend auf diesem Handbuch scheint die add_template_helper(helper_module)
Methode das zu tun, was ich will, aber ich kann nicht herausfinden, wie ich sie verwenden soll.
(Übrigens, gibt es einen Grund, warum Sie in Maileransichten Zugriff auf eine andere Gruppe von Helfern erhalten? Das ist ziemlich ärgerlich.)
ruby-on-rails
Tom Lehman
quelle
quelle
Antworten:
In der Mailer-Klasse, mit der Sie Ihre E-Mails verwalten:
quelle
Verwenden Sie in Rails 3 einfach die Hilfsmethode oben in Ihrer ActionMailer-Klasse:
Ich habe gerade einen Block übergeben, da ich ihn nur in dem einen Mailer brauche:
(Stellen Sie sicher, dass Sie config.action_mailer.default_url_options festlegen.)
(und wenn Sie url_for verwenden, müssen Sie Folgendes übergeben: only_path => false)
quelle
helper :'namespace/mail'
helper 'namespace/mail'
Für alle Mailer in Rails 3 (Einstellung "Anwendungs" -Helfer):
quelle
helper :application
funktioniert gut in Rails 4.2.1.devise
.helper :application
funktioniert in diesem Fall nicht.include ApplicationHelper
hat funktioniertFür Ruby on Rails 4 musste ich zwei Dinge tun:
(1) Wie Duke bereits sagte, wenn der Helfer, den Sie hinzufügen möchten,
UsersHelper
beispielsweise ist, fügen Sie hinzuzur abgeleiteten
ActionMailer
Klasse (zBapp/mailers/user_mailer.rb
)(2) Danach habe ich einen neuen Fehler erhalten:
Um dies zu beheben, fügen Sie die Zeile hinzu
zu jeder der
config/environments/*.rb
Dateien. Fürconfig/environments/production.rb
Ersetzenlocalhost
durch einen besser geeigneten Wirt für die Produktion Helfer generierten URLs.F: Warum benötigt die E-Mail-Ansicht für # 2 diese Informationen und die regulären Ansichten nicht?
A: Da die regulären Ansichten das nicht kennen müssen
host
, werden alle generierten Links von dem Host bereitgestellt, auf den sie verlinken. Links, die in E-Mails angezeigt werden, werden nicht vom selben Host bereitgestellt (es sei denn, Sie verlinken aufhotmail.com
odergmail.com
usw.).quelle
User::ComposedHelper
Sie können einfach Ihren Mailer hinzufügen
oder was auch immer du brauchst
quelle
(Dies ist eine alte Frage, aber Rails hat sich weiterentwickelt, sodass ich teile, was in Rails 5.2 für mich funktioniert.)
In der Regel möchten Sie beim Rendern der Betreffzeile einer E-Mail sowie des HTML-Codes einen benutzerdefinierten Ansichtshelfer verwenden. In dem Fall, in dem sich der Ansichtshelfer in app / helpers / application_helper.rb befindet, gehen Sie wie folgt vor:
Ich kann eine dynamische Betreffzeile und Vorlage für E-Mails erstellen, die beide den Helfer verwenden, aber ich muss Rails anweisen, den ApplicationHelper explizit in apps / mailer / user_mailer.rb auf zwei verschiedene Arten zu verwenden, wie Sie in der zweiten und dritten Zeile hier sehen können ::
Ich sollte erwähnen, dass diese beiden Zeilen genauso gut funktionieren, also wählen Sie die eine oder andere:
FWIW, die E-Mail-Vorlage unter app / views / user_mailer / party_thanks.html.erb sieht folgendermaßen aus:
Und der Controller app / controller / party_controller.rb sieht so aus
Ich muss OP (@Tom Lehman) und @gabeodess zustimmen, dass sich das alles unter https://guides.rubyonrails.org/action_mailer_basics.html#using-action-mailer-helpers ziemlich verworren anfühlt. Vielleicht fehlt mir etwas. .
quelle
In meinem Fall für Rails4 gefällt mir Folgendes:
und
damit Sie nicht
add_template_helper
überall angeben müssen .quelle