1

在我的动作邮件中(rails 3.2.13)我有类似的东西

class RepaymentMailer < ActionMailer::Base
  default from: "repayments@milaap.org"

  def repayment_mail user, user_repayment_info, month_date
    @mail_layout = if condition_true
                            'layout1'
                        else
                            'layout2'
                        end

  mail(to:        "#{user.first_name} <#{user.email}>",
     from:      "xxx@xxx.org",
     bcc:       ["xxx <xxx@xxx.org>"],
     reply_to:  'xxx@xxx.org',
     subject:   "this is a test" ) do |format|
      format.html { render layout: @mail_layout }
      format.text
    end
  end
end

当我做

puts RepaymentMailer.repayment_mail(param1, param2, param3).deliver

即使repayment_mail模板存在,它也会给我错误

 ActionView::MissingTemplate: Missing template repayment_mailer/repayment_mail with {:locale=>[:en], :formats=>[:text], :handlers=>[:erb, :builder, :coffee, :arb]}. Searched in:

如果我删除

 do |format|
      format.html { render layout: @mail_layout }
      format.text
    end

然后它可以正常工作。但显然我想要所需的布局。错误的原因可能是什么。

4

1 回答 1

1

因为在您的错误中,它清楚地表明问题出在这一行:

 Missing template repayment_mailer/repayment_mail with {:locale=>[:en], :formats=>[:text]**, :handlers=>[:erb, :builder, :coffee, :arb]}.

我认为您没有阅读以下几行:

 class UserMailer < ActionMailer::Base
  def welcome_email(user)
    mail(to: user.email) do |format|
      format.html { render layout: 'my_layout' }
      format.text
    end
  end
end

这将使用文件呈现 HTML 部分,如果存在通常的文件,则my_layout.html.erb使用普通文件呈现文本部分。user_mailer.text.erb

请阅读这里。

谢谢

于 2013-08-16T12:30:12.633 回答