自定义ActionMailer预览标题

时间:2016-12-20 19:50:28

标签: ruby-on-rails actionmailer

我想在动作邮件预览页面的标题中添加一些元数据。 我认为最简单的方法是在我的项目中的某处覆盖此文件: https://github.com/rails/rails/blob/4-2-stable/railties/lib/rails/templates/rails/mailers/email.html.erb

看到其他东西可以在lib / templates文件夹中被覆盖我认为类似的东西可以工作。我没有运气就试过以下事情:

  • LIB \模板\导轨\寄件人\ email.html.erb
  • LIB \模板\寄件人\ email.html.erb
  • LIB \导轨\模板\导轨\寄件人\ email.html.erb

是否有可能以某种方式覆盖此文件,如果是这样的话?

Screenshot of where I want the metadata

2 个答案:

答案 0 :(得分:1)

好的,所以我最终得到了这个。不确定它是否是最佳解决方案,但它确实有效。

首先,我复制了问题中提到的email.html.erb,并将其放在test / mailers / previews中。然后我进行了我需要的自定义,并将其重命名为email_preview_heading.html.erb。

接下来,我创建了一个新的初始化程序,它覆盖了MailersController。我将原始代码中的整个预览方法放在里面,可以在这里找到:https://github.com/rails/rails/blob/4-2-stable/railties/lib/rails/mailers_controller.rb

我在初始化程序中所做的唯一更改是在第35行,如下所示,这些行告诉预览控制器使用哪种布局。该方法的其余部分保持不变。

#config/initializers/email_preview_controller_override.rb
if Rails.env.development?
  class ::Rails::MailersController
    def preview
      ...
      render file: Rails.root.join('test/mailers/previews/email_preview_heading')
      ...
    end
  end
end

在布局文件中,我显示了作为标题传递给电子邮件的元数据,这意味着我可以像这样访问它们:@ email.header ['description']

确保仅在预览模式下传递标题。

答案 1 :(得分:0)

我能够通过在初始化程序中添加view_path来覆盖email.html.erb:

# config/initializers/email_preview_controller_override.rb    

if Rails.env.development?
  module OverrideMailerController
    def self.prepended(base)
      base.prepend_view_path Rails.root.join('test', 'mailers','previews')
    end
  end

  ::Rails::MailersController.prepend OverrideMailerController
end  

然后我将email.html.erb复制到 / test / mailers / previews / rails / mailers 。适用于Rails 5.2.3