在Rails中覆盖“show”资源路由

resources :some_resource 

也就是说,有一个route /some_resource/:id

实际上, :id some_resource :id将始终存储在session中,所以我想用/some_resource/my覆盖路径/some_resource/:id 。 或者我想用/some_resource/覆盖它并删除路径GET /some_resource/以进行索引操作。

我怎样才能实现这两个目标?

在您的routes.rb中:

 get "some_resource" => "some_resource#show" 

在线之前

 resources :some_resource 

然后rails会在找到资源之前获取“get”…从而覆盖get / some_resource

另外,你应该指定:

 resources :some_resource, :except => :index 

虽然,如上所述,铁轨不会捡起来,这是一个很好的做法

陈的答案很好(我用了一段时间的方法),但有一种标准化的方法。 在官方Rails指南中 ,首选使用收集路径

存在集合路由,因此Rails不会假定您正在指定资源:id 。 在我看来,这比在routes.rb文件中使用优先级覆盖路由更好。

 resources :some_resource, :except => :index do get 'some_resource', :on => :collection, :action => 'show' end 

如果需要指定多个收集路径,则首选使用该块。

 resources :some_resource, :except => :index do collection do get 'some_resource', :action => 'show' # more actions... end end