自定义 ActionMailer 预览标头

Dav*_*son 5 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\templates\rails\mailers\email.html.erb
  • lib\templates\mailers\email.html.erb
  • lib\rails\templates\rails\mailers\email.html.erb

是否可以以某种方式覆盖该文件,如果可以的话在哪里?

我想要元数据的位置的屏幕截图

Dav*_*son 3

好的,所以我最终成功了。不确定这是否是最好的解决方案,但它有效。

首先,我复制了问题中提到的 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
Run Code Online (Sandbox Code Playgroud)

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

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