【发布时间】:2018-10-20 03:19:50
【问题描述】:
我正在尝试使用 Rails 外部的 ActionMailer 发送电子邮件,但遇到了 Missing template 错误。
我有这样的文件夹结构。
mailer/app/mailers/welcome_email.rb
mailer/app/views/welcome_email/welcome.html.erb
mailer/mailer.rb
我有一个配置文件,其中有这一行:
mailer/initializers/config.rb
ActionMailer::Base.view_paths = File.expand_path('../../app/views/', __FILE__)
(我不明白为什么我需要添加这个额外的'../',老实说,因为路径是'一个文件夹'然后'/app/views'。如果我不这样做它会找到'/initializers/app/views/')。
File.expand_path('../../app/views/', __FILE__)
返回"/home/jedrek/workspace/rubysamples/mailer/app/views",这看起来不错。然后 ActionMailer 应该在那里找到 welcome_email/welcome.html.erb 模板,但是当我运行 mailer.rb 时出现错误
Missing template welcome_email/welcome
Searched in: (ActionView::MissingTemplate)
* "/home/jedrek/workspace/rubysamples/mailer/app/views"
为什么在/app/views/welcome_email/welcome.html.erb 中找不到文件?
我做错了什么?
【问题讨论】:
-
您的邮件名称是 MyMailer 吗?然后你应该在views文件夹中有一个名为my_mailer的文件夹,里面有一个名为welcome.html.erb的文件
-
@SaqibShahzad 抱歉,我的 Mailer 是 WelcomeEmail,我的错。
-
什么是mailer/mailer.rb
-
在这个文件中,我只需要 'welcome_email' 并将其命名为
WelcomeEmail.welcome.deliver_now -
您需要额外的“../”,因为您需要一个删除文件名,另一个删除当前目录。你也可以
File.expand_path('../app/views/', __dir__)
标签: ruby actionmailer