我想在动作邮件预览页面的标题中添加一些元数据。 我认为最简单的方法是在我的项目中的某处覆盖此文件: https://github.com/rails/rails/blob/4-2-stable/railties/lib/rails/templates/rails/mailers/email.html.erb
看到其他东西可以在lib / templates文件夹中被覆盖我认为类似的东西可以工作。我没有运气就试过以下事情:
是否有可能以某种方式覆盖此文件,如果是这样的话?
答案 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