动作邮件程序在传递布局时给出错误

时间:2013-08-16 12:27:59

标签: ruby-on-rails actionmailer

在我的动作邮件中(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

然后它没有错误地工作。 但显然我想要所需的布局。可能是错误的原因。

1 个答案:

答案 0 :(得分: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

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

请在这里阅读。

由于