【问题标题】:Rails 3: ActionMailer Default Layout with Inline AttachmentsRails 3:带有内联附件的 ActionMailer 默认布局
【发布时间】:2014-01-15 14:35:50
【问题描述】:
我的 Rails 3.2 应用程序中有许多邮件程序,我希望它们都使用相同的电子邮件布局。该布局包括页眉和页脚,其中包括要内联使用的图像。我想遵循 Rails 的 DRY 原则,但我不完全确定最佳实践是什么。
正如this answer 指出的那样,我可以使用AbstractController::Callbacks 创建before_filter 来添加内联附件。但是我该如何做到这一点以及在一个模块中设置布局,然后我可以将其包含在邮件中?
我目前的想法是创建一个名为DefaultMailer 的新邮件程序类,然后让我想使用的所有邮件程序都继承自该类的布局。或者创建一个可以处理这些任务的关注点。在尝试使用其中一种技术一起破解某些东西之前,我想我会在这里询问是否有人之前成功完成过此操作以帮助指导我。
【问题讨论】:
标签:
ruby-on-rails-3
layout
actionmailer
email-attachments
【解决方案1】:
AFAIK 从其他邮件程序继承时存在一些问题(即不继承设置)。
常见的解决方案是创建一个邮件程序基础模块。这是来自现有项目的 sn-p:
module MailerBase
extend ActiveSupport::Concern
included do
helper :application
layout 'mailer'
default from: "#{AppConfig.application_name} <#{AppConfig.mailer_sender}>"
end
end
您可以将此与您的回调结合起来,尽管包含远程图像是更常见且可以说是更好的解决方案。
【讨论】:
-
我使用asset_sync gem 将我的资产部署到 CDN,所以我仍然会使用远程图像。附件的主要目的是保证如果图像移动,它们仍将在电子邮件中正确呈现。因为这不是一个大问题,所以我还没有尝试将它与AbstractController::Callbacks 结合使用,但是使用关注点对布局和默认值有效。谢谢!