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

rails:3835

From: dezawa <dezawa@a...>
Date: Tue, 09 Oct 2012 14:19:33 +0900
Subject: [rails:3835] Re: empty?を使っていないのに、undefined method `empty?'

出沢です

(2012年10月02日 10:09), dezawa wrote:
> 出沢です
> 
> ありがとうございます。存在をすっかり忘れて居ました。
> 
> これで追った所、
>  (2012年10月01日 19:38), dezawa wrote:> 出沢 @ Rails3移行勉強中 です
>  > 「実は治っていないのだが、まだ発生する条件になっていない」
> 
> であることが判明しました。

と書きましたが、3.2.8 で治っていました。

私の行った3.2.8へのupgradeにどこかミスがあったようです。
3.2.0で当たりをつけたところが治っていなかったので、「治っていないのか」
という先入観があったようで、エラーがでてやっぱり、と思い込んでしまいま
した。

# githubでレポートして、担当の方に余分な時間をかけさせてしまいました。

3.2.0のどういう問題が3.2.8で解決していたか整理しておきます

以下の条件が揃うと、active_record/explain.rb#exec_explain
で undefined method `empty?'が発生する
1) こういうModelがある
    class Plan < ActiveRecord::Base
        belongs_to   :product
        after_find do ;  product ;  end  # これがポイント
    end
2) 存在しない Product#id を product_id に指定した Plan がある
3) その Planを含む多量のPlanを取得する
4) そのqueryが config.active_record.auto_explain_threshold_in_seconds =
   以上の時間がかかる

  この値を 0.0 にすると必ず発生する(はずな)のですが、
   くだんのPlanを一つ呼ぶだけ、
   それを含む数個を呼ぶだけ、
   Rails console
    では発生しません。

  なお config.active_record.auto_explain_threshold_in_seconds が
  無定義のときは exec_explain が呼ばれないので発生しません
  定義されているのは標準では development のみです。

# 実appでは after_find で
# product の内容に応じた moduleを Planインスタンスにextend しています。


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