对于具有相同URI模式的路由,哪个先匹配?

时间:2019-03-21 11:03:43

标签: ruby-on-rails routes

假设Rails应用程序绘制以下路线(即rake routes将显示以下路线):

Verb  URI Pattern  Controller#Action
GET   /            one#show
GET   /            two#show
GET   /            three#show

在请求根路径(即/)时,这些路由的匹配顺序是什么?哪些因素决定了哪个路线最先匹配?

背景:我正在为其编写插件的Rails应用程序(Discourse)。 Rails应用程序通过自己的route.rb文件中的root to:设置了一堆根路由。我的插件尝试提供自己的根路由,如下所示:

Discourse::Application.routes.append do
  root to: 'custom#show'
end

…在rake routes的输出中添加新路由:

Verb  URI Pattern  Controller#Action
GET   /            one#show
GET   /            two#show
GET   /            three#show
GET   /            customshow

我的问题是我无法使这个新的根优先于其他根路由。我尝试使用prepend而非append来将自定义根路由移至输出的顶部,但仍然没有首先匹配它。

编辑:大概是按照路由指定的顺序进行匹配,而不考虑rake routes输出中的顺序。

1 个答案:

答案 0 :(得分:1)

第一个匹配的路由将是先前在routes.rb中指定的路由。

  

按指定的顺序匹配路线,因此如果您   在表演动作的resources :photos上方获得'photos/poll'   资源行的路由将在获取行之前匹配。至   解决此问题,将获取行移到资源行上方,以便   首先匹配。

来源:link,第二音符