プロジェクトをあるコードベースから別のコードベースに移行して、蓄積された大量の問題をクリーンアップしたり、新しいプレゼンテーション層に移行したりしています。
関係の1つは、正規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/ruby-1.9.3-p0@zmx2/gems/actionpack-3.2.3/lib/action_dispatch/routing/route_set.rb:532:in `raise_routing_error'
from /Users/dwhsix/.rvm/gems/ruby-1.9.3-p0@zmx2/gems/actionpack-3.2.3/lib/action_dispatch/routing/route_set.rb:528:in `rescue in generate'
from /Users/dwhsix/.rvm/gems/ruby-1.9.3-p0@zmx2/gems/actionpack-3.2.3/lib/action_dispatch/routing/route_set.rb:520:in `generate'
from /Users/dwhsix/.rvm/gems/ruby-1.9.3-p0@zmx2/gems/actionpack-3.2.3/lib/action_dispatch/routing/route_set.rb:561:in `generate'
from /Users/dwhsix/.rvm/gems/ruby-1.9.3-p0@zmx2/gems/actionpack-3.2.3/lib/action_dispatch/routing/route_set.rb:586:in `url_for'
from /Users/dwhsix/.rvm/gems/ruby-1.9.3-p0@zmx2/gems/actionpack-3.2.3/lib/action_dispatch/routing/url_for.rb:148:in `url_for'
from /Users/dwhsix/.rvm/gems/ruby-1.9.3-p0@zmx2/gems/actionpack-3.2.3/lib/action_dispatch/routing/route_set.rb:213:in `user_orders_path'
from (irb):24
(これをテストしてからフルスタックトレースを提供していrails console
ます。何らかの理由で、サーバーログにこのエラーのフルスタックトレースが表示されません。)
私はこれを説明(そして修正)するのに少し途方に暮れています、そして私はこれが誰かとベルを鳴らすかもしれないことを望んでいました。私はこれを新しい空のプロジェクトでテストしましたが、もちろん正常に動作します。次に試してみるのは、これらのモデルとコントローラーについて可能な限り削除し、エラーが再発するまでピースを追加し始めることだと思います。既存のコードを移行しているため、これを小さなサンプルコードに分離することは非常に困難です。
(問題を混乱させる可能性があるため、このプロジェクトでRyan Batesのカンカンを使い始めました。ここで役割を果たしているのではないかと少し疑っていますが、それを取り除き、それなしでテストしました。この誤った動作の変更。)