(Это старый вопрос, но Rails эволюционировал, поэтому я делюсь тем, что работает для меня в Rails 5.2.)
Как правило, вы можете использовать пользовательский помощник вида при отображении строки темы письма, а также HTML. В случае, когда помощник вида находится в app / helpers / application_helper.rb следующим образом:
module ApplicationHelper
def mydate(time, timezone)
time.in_time_zone(timezone).strftime("%A %-d %B %Y")
end
end
Я могу создать динамическую строку темы письма и шаблон, которые оба используют помощника, но мне нужно указать Rails явно использовать ApplicationHelper в apps / mailer / user_mailer.rb двумя способами, так как вы можно увидеть во второй и третьей строчках здесь:
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
Я должен отметить, что эти две строки работают так же хорошо, поэтому выберите одну или другую:
helper :application
add_template_helper(ApplicationHelper)
FWIW, шаблон электронной почты на app / views / user_mailer / party_thanks.html.erb выглядит так:
<p>
Thanks for coming on <%= mydate(@party.created_at, @party.timezone) %>
</p>
И app / controller / party_controller.rb контроллер выглядит так
class PartyController < ApplicationController
...
def create
...
UserMailer.with(party: @party).party_thanks.deliver_later
...
end
end
Я должен согласиться с OP (@Tom Lehman) и @gabeodess, что все это выглядит довольно запутанно, учитывая https://guides.rubyonrails.org/action_mailer_basics.html#using-action-mailer-helpers, поэтому, возможно, я что-то упускаю ...