[前][次][番号順一覧][スレッド一覧]

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...         ]