routes.rb中路由的顺序是否重要?

时间:2016-09-01 07:06:18

标签: ruby-on-rails ruby ruby-on-rails-4

我的routes.rb文件如下:

resources :contents, only: [:show]
get 'contents/by_hardware', to: 'contents#show_by_hardware'

通过此设置,我无法访问contents/by_hardware路径。

但是,如果我以不同的顺序设置我的routes.rb文件,则可以使用。

get 'contents/by_hardware', to: 'contents#show_by_hardware'    
resources :contents, only: [:show]

routes.rb文件中的订单是否重要?

4 个答案:

答案 0 :(得分:5)

是的,订单非常重要。

它的工作方式如下:resources :contents, only: [:show]创建此路线

content GET    /contents/:id(.:format)       contents#show

因此,当您请求http://localhost:3000/contents/by_hardware时,此路由与此网址匹配。它使用参数ContentsController#show调用{'id' => "by_hardware"}操作。您的自定义操作未被考虑,因为已找到匹配的路由。

答案 1 :(得分:2)

是的,订单确实很重要。我不建议在两个不同的地方为同一个控制器定义路线,而是建议您以这种方式为上述场景定义路线

resources :contents, only: [:show] do
  get :show_by_hardware, on: :collection, path: :by_hardware
end

希望有所帮助!

答案 2 :(得分:1)

是的,重要的是,路线将从上到下进行匹配,以便您可以将路线get 'contents/by_hardware', to: 'contents#show_by_hardware'移到资源之上以解决问题

答案 3 :(得分:1)

是肯定的。路由器将匹配顶部的第一条路线