Я объединил ответ Оксаны с пользовательским подходом помощника и получил следующее, чтобы работать хорошо:
app/helpers/email_helper.rb
module EmailHelper
def email_image_tag(image, **options)
attachments[image] = File.read(Rails.root.join("app/assets/images/#{image}"))
image_tag attachments[image].url, **options
end
end
app/mailers/base_mailer.rb
class BaseMailer < ActionMailer::Base
add_template_helper(EmailHelper)
end
app/mailers/my_mailer.rb
class MyMailer < BaseMailer
def send_my_mail(email)
mail to: email, subject: "My Subject"
end
end
Тогда, например, где я хочу прикрепить логотип компании в файле макета электронной почты, я бы использовал
app/views/layouts/email.html.erb
<%= email_image_tag("company_logo.png") %>
Обратите внимание, что опции ** делают тег более расширяемым, но он будет работать только в ruby> = 2.Чтобы сделать это в ruby <2, вам придется использовать более старый способ обработки опций ключевых слов. </p>