Rails忽略了收集路由,而是与show action一起使用

mid*_*s06 16 ruby-on-rails ruby-on-rails-3

我在routes.rb文件中设置了以下路由:

resources :people do 
  collection do
    get :search
  end
end
Run Code Online (Sandbox Code Playgroud)

当我对url执行get操作时:http:// localhost:3000/people/search.json?term = stepeb,服务器报告它正在响应show动作,使用正确的term参数,但也有一个id参数,设置为"搜索".

正如我所看到的,问题是显示网址的两个网址:

/people/:id
Run Code Online (Sandbox Code Playgroud)

我相信路由器在到达/ people/search之前匹配该路由

如果是这样的话,基于收集的路线将如何运作?他们都不会受到节目动作的影响吗?

耙路线的相关部分如下:

 search_people GET      /people/search(.:format)                                                         {:action=>"search", :controller=>"people"}
                                     GET      /people(.:format)                                                                {:action=>"index", :controller=>"people"}
                              people POST     /people(.:format)                                                                {:action=>"create", :controller=>"people"}
                          new_person GET      /people/new(.:format)                                                            {:action=>"new", :controller=>"people"}
                                     GET      /people/:id(.:format)                                                            {:action=>"show", :controller=>"people"}
                                     PUT      /people/:id(.:format)                                                            {:action=>"update", :controller=>"people"}
                              person DELETE   /people/:id(.:format)                                                            {:action=>"destroy", :controller=>"people"}
                         edit_person GET      /people/:id/edit(.:format)                                                       {:action=>"edit", :controller=>"people"}
Run Code Online (Sandbox Code Playgroud)

mid*_*s06 28

Doh,别忘了这个.事实证明我有一个重复的资源:人们排在路线文件的顶部.Rails首先击中了它.在我看来,确实应该在那里检查重复的路线定义.