使用Rails 4.1 ActionMailer::Preview预览电子邮件,我需要设置哪些路由?

10
class UserPreview < ActionMailer::Preview
  # Accessible from http://localhost:3000/rails/mailers/notifier/welcome_email
  def welcome_email
    UserMailer.welcome_email(User.first)
  end
end

我在使用Ruby on Rails 4.1构建一个简单的邮件预览。

如果我将routes.rb文件中的所有路由注释掉,只留下这个,那么邮件预览就能正常工作:

MyTestApp::Application.routes.draw do

end

显然,我的一个权利是在邮件预览中使用默认的Rails之前被使用。

我需要在routes.rb文件中输入什么?

1个回答

20

我知道这是一个老问题,但还是想发表一个答案。

我猜你在 routes.rb 文件的结尾有类似于这样的路由:

match '/:controller(/:action(/:id))'

那是一个“全捕获”路由。Rails代码会将邮件发送预览路由附加到路由的末尾,因此它们永远不会被触发,因为有“全捕获”路由存在。

听起来像是在Rails 5.0中,“全捕获”路由可能被弃用了?最好检查一下你的路由,这样就不需要“全捕获”路由了。这里是一个问题链接,有人提到“全捕获”路由在某些时候被弃用: https://github.com/rails/rails/issues/15600

所以,这是解决方案。使用风险自负!

在你的“全捕获”之前插入邮件发送路由。

    get '/rails/mailers' => "rails/mailers#index"
    get '/rails/mailers/*path' => "rails/mailers#preview"

这将使你的邮件发送程序正常工作,并且你的“catch all”功能将继续正常运行。现在,这是一个完整的hack,只应在解决根本问题(即消除“catch all”路由的需要)之前使用。

我在Rails的问题列表中找到了以下内容,看起来已经被接受并合并。不确定它在哪个版本中,但似乎他们已经更新了邮件预览代码,以在路线前面添加它们,而不是附加它们。

https://github.com/rails/rails/pull/17896/files

祝好运!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接