(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:
module ApplicationHelper
def mydate(time, timezone)
time.in_time_zone(timezone).strftime("%A %-d %B %Y")
end
end
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 :
class UserMailer < ApplicationMailer
include ApplicationHelper # This enables me to use mydate in the subject line
helper :application # This enables me to use mydate in the email template (party_thanks.html.erb)
def party_thanks
@party = params[:party]
mail(to: 'user@domain.com',
subject: "Thanks for coming on #{mydate(@party.created_at, @party.timezone)}")
end
end
Powinienem wspomnieć, że te dwie linie działają równie dobrze, więc wybierz jedną lub drugą:
helper :application
add_template_helper(ApplicationHelper)
FWIW, szablon e-maila na app / views / user_mailer / party_thanks.html.erb wygląda następująco:
<p>
Thanks for coming on <%= mydate(@party.created_at, @party.timezone) %>
</p>
A kontroler app / controller / party_controller.rb wygląda następująco
class PartyController < ApplicationController
...
def create
...
UserMailer.with(party: @party).party_thanks.deliver_later
...
end
end
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 ... .