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 之前用于邮件预览。
我需要在路由 rb 文件中键入什么?
这是一个老问题,但我想无论如何我都会发布一个答案。
我猜你在 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"
这将使您的邮件程序正常工作,并且您的"全部捕获"将继续工作。 现在,这是一个完整的黑客,只有在您能够解决根本问题之前才应该使用,即消除对"全部捕获"路由的需求。
我确实在 rails 的问题列表中找到了以下内容,看起来已被接受并合并。 不确定它是什么版本,但似乎他们已经更新了邮件预览代码以在路由前置而不是附加它们。
https://github.com/rails/rails/pull/17896/files
祝你好运!