(Это старый вопрос, но 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, так что, возможно, я что-то упустил .. ,