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>。