9
resources :some_resource

也就是说,有一条路线/some_resource/:id

事实上,:idforsome_resource将始终存储在会话中,所以我想/some_resource/:id/some_resource/my. 或者我想用/some_resource/GET 覆盖它并删除/some_resource/索引操作的路径。

我怎样才能达到这两个目标?

4

2 回答 2

14

在你的 routes.rb 放:

get "some_resource" => "some_resource#show"

resources :some_resource

然后rails会在找到资源之前拿起你的“get”......从而覆盖get /some_resource

此外,您应该指定:

resources :some_resource, :except => :index

虽然,如前所述,rails 不会捡起它,但这是一个很好的做法

于 2012-09-02T14:28:14.153 回答
12

陈的回答很好(我用过这种方法一段时间),但有一种标准化的方法。在官方 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
于 2013-08-15T21:10:05.640 回答