假设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
输出中的顺序。
答案 0 :(得分:1)
第一个匹配的路由将是先前在routes.rb
中指定的路由。
按指定的顺序匹配路线,因此如果您 在表演动作的
resources :photos
上方获得'photos/poll'
资源行的路由将在获取行之前匹配。至 解决此问题,将获取行移到资源行上方,以便 首先匹配。
来源:link,第二音符