resources :some_resource
Run Code Online (Sandbox Code Playgroud)
也就是说,有一条路线 /some_resource/:id
事实上,:id对于some_resource将永远保存在会话中,所以我想覆盖路径/some_resource/:id用/some_resource/my.或者我想用它覆盖它/some_resource/并删除路径GET /some_resource/以进行索引操作.
我怎样才能实现这两个目标?
Che*_*her 14
在您的routes.rb中:
get "some_resource" => "some_resource#show"
Run Code Online (Sandbox Code Playgroud)
前行
resources :some_resource
Run Code Online (Sandbox Code Playgroud)
然后rails会在找到资源之前获取"get"...从而覆盖get/some_resource
另外,你应该指定:
resources :some_resource, :except => :index
Run Code Online (Sandbox Code Playgroud)
虽然,如上所述,铁轨不会捡起来,这是一个很好的做法
cam*_*son 11
陈的答案很好(我用了一段时间的方法),但有一种标准化的方法.在官方Rails指南中,首选使用收集路径.
存在收集路由,因此Rails不会假定您正在指定资源:id.在我看来,这比在routes.rb文件中使用优先级覆盖路由更好.
resources :some_resource, :except => :index do
get 'some_resource', :on => :collection, :action => 'show'
end
Run Code Online (Sandbox Code Playgroud)
如果您需要指定多个收集路由,则首选使用该块.
resources :some_resource, :except => :index do
collection do
get 'some_resource', :action => 'show'
# more actions...
end
end
Run Code Online (Sandbox Code Playgroud)