2012-06-27 86 views
0

我遷移從一個代碼庫到另一個項目,清理了大量積累的克魯夫特,轉移到一個新的表示層等「的ActionController :: RoutingError:沒有路由匹配」時,沒有嵌套資源

錯誤

的關係之一是規範的User has_many Order,這是我在routes.rb表示爲嵌套的資源:

resources :users do 
    resources :orders 
end 

,所以我有指定的路線user_orders_path(@user)。它的工作原理,如果用戶有訂單就好了,但是如果用戶沒有訂單,試圖呈現的路線提供了以下錯誤:

ActionController::RoutingError (No route matches {:controller=>"orders", 
:user_id=>#<User id: 472, account_id: nil, first_name: "Denis", last_name: 
"Haskin", ...etc... , last_sign_in_ip: "127.0.0.1">}) 
from /Users/dwhsix/.rvm/gems/[email protected]/gems/actionpack-3.2.3/lib/action_dispatch/routing/route_set.rb:532:in `raise_routing_error' 
from /Users/dwhsix/.rvm/gems/[email protected]/gems/actionpack-3.2.3/lib/action_dispatch/routing/route_set.rb:528:in `rescue in generate' 
from /Users/dwhsix/.rvm/gems/[email protected]/gems/actionpack-3.2.3/lib/action_dispatch/routing/route_set.rb:520:in `generate' 
from /Users/dwhsix/.rvm/gems/[email protected]/gems/actionpack-3.2.3/lib/action_dispatch/routing/route_set.rb:561:in `generate' 
from /Users/dwhsix/.rvm/gems/[email protected]/gems/actionpack-3.2.3/lib/action_dispatch/routing/route_set.rb:586:in `url_for' 
from /Users/dwhsix/.rvm/gems/[email protected]/gems/actionpack-3.2.3/lib/action_dispatch/routing/url_for.rb:148:in `url_for' 
from /Users/dwhsix/.rvm/gems/[email protected]/gems/actionpack-3.2.3/lib/action_dispatch/routing/route_set.rb:213:in `user_orders_path' 
from (irb):24 

(我在rails console這個測試提供完整的堆棧跟蹤;由於某種原因,我沒有得到完整的堆棧跟蹤服務器日誌中的這個錯誤。)

我有點不知所措解釋(和解決),我希望這可能會響起一個鐘聲有人。我在一個新的空項目中測試了它,當然它工作正常。我想未來的事情我會嘗試是剝離下來,就像我可以瞭解這些模型和控制器,並開始將碎片重新直到錯誤再次出現。因爲我在遷移現有的代碼,這是非常困難的這個隔離到一小塊的示例代碼。 (在這個問題可能引起混淆的風險中,我已經開始在這個項目中使用Ryan Bates的cancan,我有點懷疑它可能在這裏扮演一個角色,但是我沒有將它剝離並且沒有測試它,在這種不正確的行爲沒有任何變化。)

回答

1

用戶/訂單的關係是一個完整的紅鯡魚,因爲它原來。 user.rbto_param方法:

​​

這對於一些用戶返回nil。這是導致命名路由幫助失敗的原因。它只是碰巧有是沒有訂單,用戶對他們來說,to_param返回nil用戶之間的高度相關性,且這種錯誤首次露面時,我開始試圖整合順序顯示用戶。

相關問題