(Essa é uma pergunta antiga, mas o Rails evoluiu, então estou compartilhando o que funciona para mim no Rails 5.2.)
Normalmente, você pode querer usar um auxiliar de exibição personalizado para renderizar a linha de assunto de um email e o HTML. No caso em que o assistente de exibição está em app / helpers / application_helper.rb , da seguinte maneira:
module ApplicationHelper
def mydate(time, timezone)
time.in_time_zone(timezone).strftime("%A %-d %B %Y")
end
end
Posso criar uma linha de assunto e modelo de email dinâmicos que usam o auxiliar, mas preciso informar ao Rails para usar o ApplicationHelper explicitamente em apps / mailer / user_mailer.rb de duas maneiras diferentes, como você pode ver na segunda e terceira linhas aqui :
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
Devo mencionar que essas duas linhas funcionam tão bem quanto escolher uma ou outra:
helper :application
add_template_helper(ApplicationHelper)
FWIW, o modelo de email em app / views / user_mailer / party_thanks.html.erb se parece com o seguinte:
<p>
Thanks for coming on <%= mydate(@party.created_at, @party.timezone) %>
</p>
E o controlador app / controller / party_controller.rb se parece com isso
class PartyController < ApplicationController
...
def create
...
UserMailer.with(party: @party).party_thanks.deliver_later
...
end
end
Eu tenho que concordar com a OP (@Tom Lehman) e @gabeodess que tudo isso parece bastante complicado, dado https://guides.rubyonrails.org/action_mailer_basics.html#using-action-mailer-helpers, então talvez eu esteja perdendo alguma coisa .. .