Rails 4:如何对通配符路由进行例外访问邮件预览?

Rails 4: how to make exceptions to wildcard routes so I an access mail previews?

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'),但出现错误 uninitialized constant RailsController。然而,这个建议让我想看看请求在正常工作时是如何处理的,所以我删除了通配符,只是正常访问邮件程序,看到了这个:

Processing by Rails::MailersController#index as HTML

所以我将以下内容添加到路由文件的顶部,现在一切正常:

# routes.rb
...
get '/rails/mailers' => 'rails/mailers#index'
...