0

プロジェクトをあるコードベースから別のコードベースに移行して、蓄積された大量の問題をクリーンアップしたり、新しいプレゼンテーション層に移行したりしています。

関係の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のカンカンを使い始めました。ここで役割を果たしているのではないかと少し疑っていますが、それを取り除き、それなしでテストしました。この誤った動作の変更。)

4

1 に答える 1

1

結局のところ、ユーザーと注文の関係は完全に真っ赤なニシンでした。 user.rb方法がありましたto_param

def to_param
  login
end

一部のユーザーにはnilを返していました。これが、指定されたルートヘルパーが失敗した原因です。たまたま、注文がないユーザーとto_paramnilを返したユーザーの間には高い相関関係があり、このエラーは、ユーザーの注文表示を統合しようとしたときに最初に現れました。

于 2012-06-27T15:35:14.117 に答える