resources :some_resource
也就是说,有一条路线/some_resource/:id
事实上,:id
forsome_resource
将始终存储在会话中,所以我想/some_resource/:id
用/some_resource/my
. 或者我想用/some_resource/
GET 覆盖它并删除/some_resource/
索引操作的路径。
我怎样才能达到这两个目标?
resources :some_resource
也就是说,有一条路线/some_resource/:id
事实上,:id
forsome_resource
将始终存储在会话中,所以我想/some_resource/:id
用/some_resource/my
. 或者我想用/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 指南中,首选使用收集路线。
集合路由存在,因此 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