You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Rails ActionView::MissingTemplate问题:邮件模板无法识别咨询

问题原因与修复方案

核心问题:模板路径配置错误

你在mail方法里指定的template_path多写了views/前缀——Rails会自动在项目根目录的views文件夹下查找模板,无需手动添加该前缀,这才导致模板匹配失败。

修复步骤:

1. 修正邮件类中的模板路径

将template_path的值从'views/mailers/contact_us_mailer'改为'mailers/contact_us_mailer',修改后的邮件类代码:

class ContactUsMailer < ActionMailer::Base
  default from: 'myemail@gmail.com'

  def contact_us(name:, email:, message:)
    @name = name
    @email = email
    @message = message
    mail(
      to: 'myemail@gmail.com',
      subject: "New email inquiry from #{@name} (#{@email})",
      template_path: 'mailers/contact_us_mailer', # 移除views/前缀
      template_name: 'contact_us'
    )
  end
end

2. 确保模板文件名合规

Rails模板必须携带格式后缀,你的HTML模板文件名应为contact_us.html.erb(不能只叫contact_us),放在views/mailers/contact_us_mailer/目录下。如果需要纯文本版本,可额外创建contact_us.text.erb。

3. 可选:简化配置(推荐)

其实可以完全省略template_path和template_name参数,只要保持以下对应关系即可:

  • 将模板目录从views/mailers/contact_us_mailer迁移到views/contact_us_mailer(ContactUsMailer的默认mailer_name就是contact_us_mailer)
  • 邮件类代码简化为:
class ContactUsMailer < ActionMailer::Base
  default from: 'myemail@gmail.com'

  def contact_us(name:, email:, message:)
    @name = name
    @email = email
    @message = message
    mail(
      to: 'myemail@gmail.com',
      subject: "New email inquiry from #{@name} (#{@email})"
    )
  end
end

此时Rails会自动匹配views/contact_us_mailer/contact_us.html.erb模板。

验证修复

移除body: @message参数,重新触发邮件发送,即可正常加载模板并发送完整的HTML邮件。

内容的提问来源于stack exchange,提问作者Misha Krul

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 00:20:02