(Dies ist eine alte Frage, aber Rails hat sich weiterentwickelt, sodass ich teile, was in Rails 5.2 für mich funktioniert.)
In der Regel möchten Sie beim Rendern der Betreffzeile einer E-Mail sowie des HTML-Codes einen benutzerdefinierten Ansichtshelfer verwenden. In dem Fall, in dem sich der Ansichtshelfer in app / helpers / application_helper.rb befindet, gehen Sie wie folgt vor:
module ApplicationHelper
def mydate(time, timezone)
time.in_time_zone(timezone).strftime("%A %-d %B %Y")
end
end
Ich kann eine dynamische Betreffzeile und Vorlage für E-Mails erstellen, die beide den Helfer verwenden, aber ich muss Rails anweisen, den ApplicationHelper explizit in apps / mailer / user_mailer.rb auf zwei verschiedene Arten zu verwenden, wie Sie in der zweiten und dritten Zeile hier sehen können ::
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
Ich sollte erwähnen, dass diese beiden Zeilen genauso gut funktionieren, also wählen Sie die eine oder andere:
helper :application
add_template_helper(ApplicationHelper)
FWIW, die E-Mail-Vorlage unter app / views / user_mailer / party_thanks.html.erb sieht folgendermaßen aus:
<p>
Thanks for coming on <%= mydate(@party.created_at, @party.timezone) %>
</p>
Und der Controller app / controller / party_controller.rb sieht so aus
class PartyController < ApplicationController
...
def create
...
UserMailer.with(party: @party).party_thanks.deliver_later
...
end
end
Ich muss OP (@Tom Lehman) und @gabeodess zustimmen, dass sich das alles unter https://guides.rubyonrails.org/action_mailer_basics.html#using-action-mailer-helpers ziemlich verworren anfühlt. Vielleicht fehlt mir etwas. .