(Це старе питання, але 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 у програмах / 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, шаблон електронної пошти в програмі / 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
Я маю згоду з ОП (@Tom Lehman) та @gabeodess, що все це виглядає доволі розгублено, зважаючи на https://guides.rubyonrails.org/action_mailer_basics.html#using-action-mailer-helpers, тому, можливо, я щось пропускаю .. .