我的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
文件中的订单是否重要?
答案 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)
是肯定的。路由器将匹配顶部的第一条路线