resources :some_resource
即,有一条路线/some_resource/:id
事实上,:id
的{{1}}将始终存储在会话中,因此我希望使用some_resource
覆盖路径/some_resource/:id
。或者我想用/some_resource/my
覆盖它,并删除路径GET /some_resource/
以进行索引操作。
我如何实现这两个目标?
答案 0 :(得分:14)
在您的routes.rb中:
get "some_resource" => "some_resource#show"
在行 之前
然后rails会在找到资源之前拿起你的“get”...从而覆盖get / some_resource 此外,您应指定: 虽然,如上所述,rails不会捡起来,这是一个很好的做法resources :some_resource
resources :some_resource, :except => :index
答案 1 :(得分:9)
Chen's answer工作正常(我使用该方法已有一段时间了),但有一种标准化的方法。在Official Rails Guides中,首选使用收集路线。
存在收集路由,因此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