2012-06-27 81 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用户之间的高度相关性,且这种错误首次露面时,我开始试图整合顺序显示用户。

相关问题