(Questa è una vecchia domanda ma Rails si è evoluto, quindi sto condividendo ciò che funziona per me in Rails 5.2.)
In genere potresti voler utilizzare un helper di visualizzazione personalizzato per il rendering della riga dell'oggetto di un'e-mail e dell'HTML. Nel caso in cui l'helper della vista sia in app / helpers / application_helper.rb come segue:
module ApplicationHelper
def mydate(time, timezone)
time.in_time_zone(timezone).strftime("%A %-d %B %Y")
end
end
Posso creare un oggetto e un modello dinamici di posta elettronica che utilizzano entrambi l'helper ma devo dire a Rails di usare esplicitamente ApplicationHelper in apps / mailer / user_mailer.rb in due modi diversi, come puoi vedere nella seconda e terza riga qui :
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 dire che queste due linee funzionano altrettanto bene, quindi scegli l'una o l'altra:
helper :application
add_template_helper(ApplicationHelper)
FWIW, il modello e-mail su app / views / user_mailer / party_thanks.html.erb è simile al seguente:
<p>
Thanks for coming on <%= mydate(@party.created_at, @party.timezone) %>
</p>
E il controller app / controller / party_controller.rb si presenta così
class PartyController < ApplicationController
...
def create
...
UserMailer.with(party: @party).party_thanks.deliver_later
...
end
end
Sono d'accordo con OP (@Tom Lehman) e @gabeodess che tutto ciò sembra abbastanza contorto dato https://guides.rubyonrails.org/action_mailer_basics.html#using-action-mailer-helpers, quindi forse mi manca qualcosa .. .