【问题标题】:Missing template layouts/mailer with {:locale=>[:en], :formats=>[:html],缺少带有 {:locale=>[:en], :formats=>[:html] 的模板布局/邮件程序,
【发布时间】:2016-11-18 19:28:44
【问题描述】:

我正在关注 michael harlt rails 教程,但出现此错误

缺少带有 {:locale=>[:en], :formats=>[:html], :variants=>[], :handlers=>[:raw, :erb, :html, 的模板布局/邮件程序:构建器,:ruby,:coffee,:jbuilder]}。搜索:*“/home/ubuntu/workspace/app/views”

预览帐户激活时

这是我的 user_mailer.rb

class UserMailer < ApplicationMailer

  def account_activation(user)
    @user = user
    mail to: user.email,  subject: "Account activation"
  end

  def password_reset
    @greeting = "Hi"

    mail to: "to@example.org"
  end
end

并且错误突出显示了

的行
mail to: user.email,  subject: "Account activation"

我尝试在 user_mailer.rb 中添加布局“邮件程序”,但它不起作用。

编辑: Here is the screenshot of the error

The screenshot of my folders

【问题讨论】:

  • 您需要添加实际的 erb.html(或您可能拥有的任何其他变体)

标签: ruby-on-rails ruby ruby-on-rails-3 web ruby-on-rails-5


【解决方案1】:

确保您拥有文件app/mailers/application_mailer.rb 来自 Hartl 的教程:

class ApplicationMailer < ActionMailer::Base
 default from: "noreply@example.com"
 layout 'mailer'
end

【讨论】:

  • 我确实有该文件,视图中包含所有 user_mailers 模板
【解决方案2】:

如果您还没有,您将需要一个名为 user_mailer 的视图中的文件夹,并且您需要在其中为每个方法创建一个文件(account_activation.html.erb 和 password_reset.html.erb)。这是您的电子邮件模板所在的位置。

【讨论】:

  • 我有它们,视图中的所有 html.erb 文件。
  • 你有这个项目的github链接吗?或您的邮件文件夹的屏幕截图和您放置这些文件的视图?
  • 我用的是比特桶,但我可以截图。
  • 是的,请 - 如果你能截图它会有所帮助。我只想查看视图中文件夹的布局以及邮件文件夹中的文件。
  • 名称是 account_activation 还是 account_activations?突出显示的文件?
【解决方案3】:

我遇到了同样的问题,如果我在 application_mailer 中注释掉 layout 'mailer' 行,它似乎对我有用

例如

class ApplicationMailer < ActionMailer::Base
  default from: 'noreply@taskflow.herokuapp.com'
  # layout 'mailer'
end

【讨论】:

  • 知道为什么rails generate 命令没有为我们生成布局文件而为 Michael Hartl 生成了布局文件吗?
【解决方案4】:

问题是下一个:

要生成此邮件,请使用此命令

$rails generate mailer UserMailer account_activation password_reset

发回

create  app/mailers/user_mailer.rb
create  app/mailers/application_mailer.rb
invoke  erb
create    app/views/user_mailer
create    app/views/layouts/mailer.text.erb
create    app/views/layouts/mailer.html.erb
invoke  test_unit
create    test/mailers/user_mailer_test.rb
create    test/mailers/previews/user_mailer_preview.rb

通过一种奇怪的方式app/views/layouts/mailer.html.erb文件不会生成所以当你调用时

布局“邮件”

rails 核心向您发送此错误

“缺少模板布局/邮件”

您可以通过两种方式解决此问题。

首先:注释掉或删除布局'mailer'。
第二:创建文件。

像“layout mailer”这样的其他方式是不好的做法,因为这种语法对 Rails 没有意义。

如果您创建文件,请使用此代码填充它

<!DOCTYPE html>
<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <style>
      /* Email styles need to be inline */
    </style>
  </head>

  <body>
    <%= yield %>
  </body>
</html>

【讨论】:

  • 创建空白文件引发异常。仅使用 HTML 注释创建一个会导致空白 HTML 视图输出(文本工作正常)。您的文件中有哪些内容?
  • 谢谢。尝试使用反引号 - ` 将文本标记为代码
【解决方案5】:

我遇到了同样的问题,解决方法是确保我在 .../app/views/layouts/ 中有两个文件:mailer.html.erbmailer.text.erb

mailer.html.erb:

<!DOCTYPE html>
<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <style>
      /* Email styles need to be inline */
    </style>
  </head>

  <body>
    <%= yield %>
  </body>
</html>

mailer.text.erb:

<%= yield %>

【讨论】:

  • 这些文件的内容是什么?
  • @TomHale,我已经编辑了我的回复以包含两个文件的内容。
  • 太好了,这是我采用的解决方案。我相信它是唯一一个在纯文本情况下通用的——谢谢!
【解决方案6】:

您的UserMailer 类仍然继承自ApplicationMailer,它将基本布局目录定义为layout 'mailer'。为了使您当前的代码和文件夹结构正常工作,您可以进行以下更改。

从这里

UserMailer < ApplicationMailer

到这里

UserMailer < ActionMailer::Base

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-14
    • 1970-01-01
    • 2022-06-22
    • 2015-09-08
    • 1970-01-01
    相关资源
    最近更新 更多