在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