2012-06-27 7 views
0

가 나는 등 새로운 프리젠 테이션 계층으로 이동, 축적 된 cruft에 많이 정리하는 하나 개의 코드베이스에서 다른 프로젝트,는 : 중첩 된 자원

를 마이그레이션하지있어 오류 "ActionController :: RoutingError 없음 경로가 일치하지 않습니다"

resources :users do 
    resources :orders 
end 

그래서 나는 명명 된 경로 user_orders_path(@user)이 : 관계의

하나는 내가 routes.rb에 중첩 자원으로 표명 한 정규 User has_many Order입니다. 그것은 사용자가 주문이있는 경우 잘 작동하지만 사용자가 더 주문이없는 경우, 경로를 렌더링하려고하면 다음과 같은 오류를 제공합니다 :

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

사용자/주문 관계는 완전히 붉은 청어였습니다.

def to_param 
    login 
end 

일부 사용자에 대해 전무를 반환했다 : user.rbto_param 방법을했다. 이것은 명명 된 경로 도우미가 실패하게 만든 원인입니다. 방금 주문을하지 않은 사용자와 to_param이없는 사용자간에 높은 상관 관계가 있었고 사용자에게 주문 표시를 통합하기 시작했을 때이 오류가 처음 나타났습니다.

관련 문제