rails:3828
From: dezawa <dezawa@a...>
Date: Sun, 30 Sep 2012 11:17:00 +0900
Subject: [rails:3828] empty?を使っていないのに、undefined method `empty?'
出沢 @ Rails3移行勉強中 です 皆様のおかげで、rake test が通るようになりました。 が、 rails server での評価に入ったところで引っかかって居ます。 「こうすると必ず」ではないのが厄介なのですが、 NoMethodError (undefined method `empty?' for nil:NilClass): app/controllers/ube_skd_controller.rb:379:in `makeplan' がでます。 ブラウザー上もログにもバックトレースはなし。(1) ここは下のような文で empity? は使われていません。 @model = UbeSkd.find(params[:id],:include => {:ube_plans => :ube_product}) また、Rails.root配下にも使われていません(2) AR内部のmethodで起きているらしい。 色々試して(3)どうやら [0]plans.product_id に 存在しない product#id が使われていると発生する という感触です。 しかし、 必ず起きるわけではない。(一度起きると頻繁に、ほぼ確実に起きます) rails console では発生しない ということがあり、確信が持てません。 アプリ自身はそうならないように仕掛けてはあるのですが、非定常作業で そうならない→無いproductは使えない、使われているproductは削除できない) (古い)productを削除してしまうことがあるようです。 それも防ぐ手立ては考えますが、万一を考え消されたときの対応もとろうと おもっています。 どうしたいか、というと (A)ARでは止めない (B)アプリで「存在しないProductが使われている」と警告し動作を中止 (B)の方は仕込み終わったのですが、(A)をどうしてよいか分からず、 発生し始めるとお手上げという状態です。 さて、 [1] [0]の推定は正しいのでしょうか、 この様な時に例外を発生させない方法はあるでしょうか [2] [0]が正しいとして、なぜconsoleでは発生しない? [3] Skd.findのときに、:include オプションを使わないと、 発生しない様なのです。これは正しい? もしこれが正しければ、DBのアクセスが増えても:include なしで 済ませるのも手かと考えて居ます。 が、 なんか悔しいのです。 よろしくお願いします ############ (1) Rails2 では /usr/lib/ruby にまでトレースしてくれたのですが、 Rails3 では してくれないのでしょうか。 (2) users_controller.rb にはあるのですが、skd_controller 実行時には 通らないでしょう。 $ find . | xargs grep empty? ./app/controllers/users_controller.rb: if success && user.errors.empty? (3) ・発生し始めるとskd_controllernに他にもある以下の様な所でも起きる #index @models = UbeSkd.all(params[:id],:include => {:ube_plans => :ube_product}) ・「そのようなproduct_idを持たないplan」だけしか持たない skd で実行す ると起きない ・@model = UbeSkd.find(params[:id])#,:include => {:ube_plans => :ube_product}) なら起きない ・しかし、、、 console で以下を行っても正常に終了するので、ARだけの問 題ではなさそう。 @model = UbeSkd.find(id,:include => {:ube_plans => :ube_product}) -- ML: rails@r... 使い方: http://QuickML.com/
-> 3828 2012-09-30 04:17 [dezawa@a... ] empty?を使っていないのに、undefined method `empty?' @ 3829 2012-09-30 04:40 ┣[netwillnet@g... ] 3830 2012-09-30 07:33 ┃┗[dezawa@a... ] 3832 2012-10-01 17:28 ┃ ┗[zn@m... ] 3833 2012-10-02 03:09 ┃ ┗[dezawa@a... ] 3834 2012-10-02 12:42 ┃ ┣[dezawa@a... ] 3835 2012-10-09 07:19 ┃ ┗[dezawa@a... ] 3831 2012-10-01 12:38 ┗[dezawa@a... ]