Ruby on rails Rails 4:如何对通配符路由进行例外,以便访问邮件预览?
在Ruby on rails Rails 4:如何对通配符路由进行例外,以便访问邮件预览?,ruby-on-rails,ruby,email,routes,actionmailer,Ruby On Rails,Ruby,Email,Routes,Actionmailer,在routes.rb中,我有以下内容: get '*category/*location' => 'landing#show' get '*category' => 'landing#show' 这使我无法在/rails/previews上查看邮件预览,因为我被重定向,就像我键入了/painting或/painting/chicago一样 使用Rails布线指南,我尝试进行如下约束: get '*category/*location' => 'landing#show',
routes.rb
中,我有以下内容:
get '*category/*location' => 'landing#show'
get '*category' => 'landing#show'
这使我无法在/rails/previews
上查看邮件预览,因为我被重定向,就像我键入了/painting
或/painting/chicago
一样
使用Rails布线指南,我尝试进行如下约束:
get '*category/*location' => 'landing#show', constraints: { category: /(?!rails)/, location: /(?!mailers)/ }
get '*category' => 'landing#show', constraints: { category: /(?!rails\/mailers)/ }
…然而,这似乎阻止了除/rails/mailers
之外的所有内容(我现在可以打开邮件预览,但之前的所有动态行为都被破坏了),或者只是将这两行设为空-不确定是哪一行。我所能说的是,我现在可以访问邮件预览,但是以前的动态行为被破坏了
我的另一个想法是,如果我没有像这样进行开发,就跳过通配符行:
unless Rails.env.development?
get '*category/*location' => 'landing#show'
get '*category' => 'landing#show'
end
然而,这似乎有点笨拙。它阻止我查看开发中的通配符行为,我只是想知道是否有更好的方法使用约束。有人能帮我弄清楚,除非url以
/rails/server
结尾,否则我需要做什么才能让这些通配符正常工作 我在@gregates的注释中尝试了该解决方案(在通配符上方设置get'/rails/previews'
),但得到了错误未初始化的常量RailsController
。然而,这个建议让我想看看当请求正常工作时是如何处理的,所以我删除了通配符,只是正常访问了邮件程序,并看到了以下内容:
Processing by Rails::MailersController#index as HTML
因此,我在routes文件的顶部添加了以下内容,现在一切正常:
# routes.rb
...
get '/rails/mailers' => 'rails/mailers#index'
...
我不明白为什么你不能把你的
get'/rails/previews'
路由放在routes.rb
文件中比你的通配符路由更高的位置。这导致未初始化常量RailsController
我使用了get'rails/mailers',to:'rails/mailers#index'
,这对我来说很有效,我不得不删除前面的//code>。