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

ser*_*erg 9 routes ruby-on-rails preview mailer

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

我使用Ruby on Rails 4.1进行了这个简单的邮件预览.

如果我注释掉了我routes.rb文件中的所有路由而只留下这个,那么邮件程序预览就会起作用:

MyTestApp::Application.routes.draw do

end
Run Code Online (Sandbox Code Playgroud)

所以显然我的一个权利是在默认的Rails之前用于邮件预览.

我需要输入路由rb文件?

小智 18

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

我猜你在routes.rb文件的末尾附近有一条类似于此的路线:

match '/:controller(/:action(/:id))'
Run Code Online (Sandbox Code Playgroud)

这是一个"赶上所有"的路线.rails代码将邮件程序预览路由附加到路径的末尾,因此由于"全部捕获"路径而永远不会到达它们.

听起来像'catch all'路线可能会在rails 5.0中退役吗?查看您的路线可能是个好主意,因此您不需要"全部捕获".这是一个问题的链接,有人提到'赶上所有'在某些时候正在退休:https://github.com/rails/rails/issues/15600

所以,这是修复. 使用风险自负!

在"全部捕获"之前插入邮件路由.

    get '/rails/mailers' => "rails/mailers#index"
    get '/rails/mailers/*path' => "rails/mailers#preview"
Run Code Online (Sandbox Code Playgroud)

这将允许您的邮件工作,你的"全部捕获"将继续工作.现在,这是一个完整的黑客攻击,只有在你能够修复root问题之后才能使用它,这样就不再需要'catch all'路由了.

我确实在rails的问题列表中找到了以下内容,看起来已被接受并合并.不知道它是什么版本,但似乎他们更新了邮件程序预览代码以预先添加路由而不是附加它们.

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

祝好运!