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

时间:2015-02-20 17:35:23

标签: 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', constraints: { category: /(?!rails)/, location: /(?!mailers)/ }
  get '*category' => 'landing#show', constraints: { category: /(?!rails\/mailers)/ }

...但是,这似乎阻止了所有除了 /rails/mailers(我现在可以打开邮件预览,但所有以前的动态行为都被破坏了)或者它刚刚制作完成两行null - 不确定哪一行。我可以说的是,我现在可以访问邮件预览,但先前的动态行为已被破坏。

如果我不是这样开发的话,我的另一个想法就是跳过通配符行:

  unless Rails.env.development?
    get '*category/*location' => 'landing#show'
    get '*category' => 'landing#show'
  end

然而,这似乎有点吝啬。它阻止我在开发中查看通配符行为,我只是想知道是否有更好的方法使用约束。有人可以帮我弄清楚我需要做些什么才能让那些通配符工作除非网址以/rails/server结尾。

1 个答案:

答案 0 :(得分:1)

我在@gregates的评论中尝试了解决方案(在通配符上方设置了get '/rails/previews')但得到了错误uninitialized constant RailsController。但是,这个建议让我想一想当请求在正常工作时如何处理,所以我删除了通配符,只是正常访问邮件程序,并看到了:

Processing by Rails::MailersController#index as HTML

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

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