Chcę użyć metod, które zdefiniowałem app/helpers/annotations_helper.rb
w moich widokach ReportMailer ( app/views/report_mailer/usage_report.text.html.erb
). Jak mam to zrobic?
Na podstawie tego przewodnika wydaje się, że add_template_helper(helper_module)
metoda może robić to, co chcę, ale nie mogę wymyślić, jak jej użyć.
(BTW, czy istnieje powód, dla którego masz dostęp do innego zestawu pomocników w widokach mailera? To dość denerwujące).
ruby-on-rails
Tom Lehman
źródło
źródło
Odpowiedzi:
W klasie mailera używanej do zarządzania wiadomościami e-mail:
źródło
W Rails 3 wystarczy użyć metody helper na szczycie klasy ActionMailer:
Właśnie przeszedłem blok, ponieważ potrzebuję go tylko w jednym Mailerze:
(pamiętaj, aby ustawić config.action_mailer.default_url_options.)
(a jeśli używasz adresu url_for, pamiętaj, aby podać: only_path => false)
źródło
helper :'namespace/mail'
helper 'namespace/mail'
Dla wszystkich mailerów w Rails 3 (ustawienie pomocnika „aplikacji”):
źródło
helper :application
działa dobrze w Railsach 4.2.1.devise
.helper :application
w tym przypadku nie działa.include ApplicationHelper
działałoW przypadku Ruby on Rails 4 musiałem zrobić 2 rzeczy:
(1) As już powiedział Duke , jeśli na przykład pomocnikiem, którego chcesz dodać
UsersHelper
, to dodajdo
ActionMailer
klasy pochodnej (npapp/mailers/user_mailer.rb
)(2) Następnie otrzymałem nowy błąd:
Aby to naprawić, dodaj linię
do każdego z
config/environments/*.rb
plików. Dlaconfig/environments/production.rb
zastąpienialocalhost
bardziej odpowiednim hostem dla adresów URL generowanych przez pomocników produkcyjnych.P: W przypadku nr 2, dlaczego widok poczty potrzebuje tych informacji, a zwykłe widoki nie?
Odp .: Ponieważ zwykłe widoki nie muszą znać
host
, ponieważ wszystkie wygenerowane linki są obsługiwane z hosta, do którego prowadzą. Łącza wyświetlane w wiadomościach e-mail nie są udostępniane z tego samego hosta (chyba że łączysz się zhotmail.com
lubgmail.com
itd.)źródło
User::ComposedHelper
Możesz po prostu dodać w swoim mailerze
lub cokolwiek potrzebujesz pomocnika
źródło
(To stare pytanie, ale Railsy ewoluowały, dlatego dzielę się tym, co działa dla mnie w Railsach 5.2.)
Zazwyczaj możesz użyć niestandardowego pomocnika widoku do renderowania tematu wiadomości e-mail, a także HTML. W przypadku, gdy pomocnik widoku znajduje się w app / helpers / application_helper.rb w następujący sposób:
Mogę utworzyć dynamiczny wiersz tematu i szablon, które używają pomocnika, ale muszę powiedzieć Railsom, aby korzystały z ApplicationHelper jawnie w apps / mailer / user_mailer.rb na dwa różne sposoby, jak widać w drugim i trzecim wierszu tutaj :
Powinienem wspomnieć, że te dwie linie działają równie dobrze, więc wybierz jedną lub drugą:
FWIW, szablon e-maila na app / views / user_mailer / party_thanks.html.erb wygląda następująco:
A kontroler app / controller / party_controller.rb wygląda następująco
Muszę zgodzić się z OP (@Tom Lehman) i @gabeodess, że to wszystko wydaje się dość skomplikowane, biorąc pod uwagę https://guides.rubyonrails.org/action_mailer_basics.html#using-action-mailer-helpers, więc może coś mi brakuje ... .
źródło
w moim przypadku dla Rails4 lubię to:
i
abyś nie musiał określać
add_template_helper
wszędzie.źródło