2012-01-05 92 views
0

我需要匹配導致不匹配的複雜路由,這些是我的路由文件條目。複雜的路由問題Rails 3

match 'households/:id/edit'=>'households#edit', :via=>:get, :as=>:edit_household, :id=>/\d{1,5}/ 
    match 'households/:id' => 'households#update', :via => :put 
    match 'households/:id' => 'households#destroy', :via=>:delete 
    match 'households/:city_code-:region_code'=>'households#index', :via=>:get, :as=>:households, :city_code=>/[A-Z]{3,5}/, :region_code=>/[A-Z]{0,3}\d{0,5}/ 
    match 'households/:city_code-:region_code-:h_uid'=>'households#show', :via=>:get, :as=>:household, :city_code=>/[A-Z]{3,5}/, :region_code=>/[A-Z]{0,3}\d{0,5}/ 

現在的問題是,請求

http://0.0.0.0:3000/households/9/edit 

被路由到顯示控制器和誤差產生

路由錯誤

No route matches {:controller=>"households", :action=>"show", :format=>nil, :city_code=>#<Household id: 9, uid: "0004", house_no: "House No 12", street: "Street 512", address: "Lorem ipsum dolor sit amet, consectetur adipisicing...", region_id: 3, created_at: "2012-01-05 11:06:32", updated_at: "2012-01-05 11:06:32">} 

任何一個可以幫助我在裏面?

+0

您確定該網址是路由到show controller,而不是編輯頁面上的某些內容試圖(但失敗)生成鏈接到顯示頁面? – 2012-01-05 11:50:45

+0

是的,我確定,當我在瀏覽器中輸入直接編輯網址時,它來到'沒有路由匹配錯誤',錯誤的時候你可以看到'show'動作被描述。 – 2012-01-05 11:52:57

+0

在development.log中是否有回溯? – 2012-01-05 12:35:04

回答

1

我改變了我的路線:

resources :households, :only=>[:index, :edit, :update, :destroy] do 
    collection do 
     match ':city_code-:region_code-:h_uid'=>'households#show', :via=>:get, :as=>:show, :city_code=>/[A-Z]{3,5}/, :region_code=>/[A-Z]{0,3}\d{0,5}/ 
    end 
    end 

和每一件事情是工作的罰款。

0

好像你傳遞不是city_code到路由幫手,但對象:

:city_code => #<Household id: 9, uid: "0004", house_no: "House No 12", ... > 

這是當然的,由路由器拒絕,因爲它有一個限制::city_code=>/[A-Z]{3,5}/

+0

我不會在視圖中傳遞任何內容。我正在通過在瀏覽器中輸入url來測試它。正如你在路由中看到的那樣,編輯路由在節目上方,並且url符合編輯路由的約束,但它仍然用於顯示。 – 2012-01-05 12:00:25