2010-06-23 51 views
11

我在我的routes.rb文件中設置了以下路線:Rails的忽略收集路線,並與表演動作反潛

resources :people do 
    collection do 
    get :search 
    end 
end 

當我做的URL取得動作:http://localhost:3000/people/search.json?term=stepeb, 服務器報告它使用正確的術語參數響應演出動作,但也有一個設置爲「搜索」的ID參數。

的問題,在我看來,有兩個URL 展會網址是:

/people/:id 

,我相信它到達/人/搜索

之前路由器匹配的路由

如果是這種情況,基於集合的路線將如何工作?他們都不會被這場表演行動所困擾嗎?

耙路由的相關部分如下:

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"} 
+2

不確定問題出在哪裏,但是這應該可以按照您的預期工作。 (我想知道.json格式是否會產生問題。)您能給我們提供'rake routes'嗎? – 2010-06-23 06:54:36

+0

我添加.json,當我看到它不工作的預期方式。沒有區別。 – midas06 2010-06-23 07:10:43

回答

21

算了,算了吧。原來我在路線文件的頂部有一個重複的資源:people行。 Rails首先擊中了它。在我看來,真的應該在那裏檢查重複的路線定義。

+0

保存了我的一天。在routes.rb超過1000行:) – 2014-04-16 14:26:16

+0

感謝米納斯..刪除重複的資源,其工作很好。自昨天以來我一直在掙扎。再次感謝:) – 2014-05-07 10:21:58

+0

真棒,謝謝! – astgtciv 2015-10-15 07:12:18

0

您運行的是什麼版本的Rails的?試着用你在這裏提供的代碼創建一個測試應用程序,看看它是否有效。可能還有其他可能導致你沒有提到的衝突。

使用您的Rails代碼3.0.0beta4產生預期的效果:

Started GET "/people/search.json?term=boo" for 192.168.1.2 at 2010-06-23 03:39:26 -0400 
    Processing by PeopleController#search as JSON 
    Parameters: {"term"=>"boo"} 
Completed in 49ms 

這裏是我的路線文件:

resources :people do 
    collection do 
     get :search 
    end 
    end 

我有一個定義的搜索方法的people_controller.rb。

+0

我現在在邊緣滑軌上運行,但我也嘗試過測試版4 ... – midas06 2010-06-23 20:42:31

0

我也有類似的問題。根據你的榜樣我的routes.rb這個樣子

resources :people 

... 

resources :people do 
    collection do 
     get :search 
    end 
    end 

將其改爲:

resources :people do 
    collection do 
     get :search 
    end 
    end 

... 

resources :people 

,我可以訪問集合... 順便說一句,這是添加路由的適當的方式?在向控制器添加動作並留下「舊」資源時添加新路線是一種很好的風格:喜歡它的人是?

+0

我知道這是舊的,但你基本上只是第二次添加重複。 – bradlis7 2017-01-22 04:55:50