(Đây là một câu hỏi cũ nhưng Rails đã phát triển nên tôi chia sẻ những gì phù hợp với tôi trong Rails 5.2.)
Thông thường, bạn có thể muốn sử dụng trình trợ giúp chế độ xem tùy chỉnh để hiển thị dòng chủ đề của email cũng như HTML. Trong trường hợp người trợ giúp xem app / helpers / application_helper.rb như sau:
module ApplicationHelper
def mydate(time, timezone)
time.in_time_zone(timezone).strftime("%A %-d %B %Y")
end
end
Tôi có thể tạo một dòng tiêu đề và mẫu tiêu đề email động mà cả hai đều sử dụng trình trợ giúp nhưng tôi cần nói với Rails để sử dụng ApplicationHelper một cách rõ ràng trong apps / mailer / user_mailer.rb theo hai cách khác nhau, như bạn có thể thấy trong dòng thứ hai và thứ ba ở đây :
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
Tôi nên đề cập rằng hai dòng này cũng hoạt động tốt vì vậy hãy chọn một hoặc hai dòng khác:
helper :application
add_template_helper(ApplicationHelper)
FWIW, mẫu email tại app / Views / user_mailer / party_thanks.html.erb trông như thế này:
<p>
Thanks for coming on <%= mydate(@party.created_at, @party.timezone) %>
</p>
Và ứng dụng / bộ điều khiển / party_controll.rb trông như thế này
class PartyController < ApplicationController
...
def create
...
UserMailer.with(party: @party).party_thanks.deliver_later
...
end
end
Tôi phải đồng ý với OP (@Tom Lehman) và @gabeodess rằng tất cả điều này cảm thấy khá khó chịu khi được đưa ra https://guides.rubyonrails.org/action_mailer_basics.html#USE-action-mailer-helpers vì vậy có lẽ tôi đang thiếu thứ gì đó .. .