2011-10-12 30 views
0

私のレール2.3.2アプリケーションの1つにこの奇妙なエラーがあります。私の知る限り推測できるようNoMethodError in Rails 2.3.2 app

NoMethodError in Timesheet#index 

undefined method '>=' for nil:NilClass 

Extracted source (around line #27): 

24:  for alog in act_logs 
25:   if alog.user_id == session[:user_id].id 
27:   if(alog.log_date>[email protected]_of_week()&& alog.log_date<[email protected]_of_week()) 

、私はalog.log_date@dt.beginning_of_weekのいずれかがnilであると思います。しかし、迅速な検査直前のライン#27(ここでは含まれていない検査)以下の値を示しています

#alog.log_date 
Wed, 09 Feb 2011 

#@dt.beginning_of_week() 
Mon, 10 Oct 2011 

さて、これらの値のどれもが、私はライン#27でこのundefined method >= for nil:NilClassエラーを取得しない理由はnilではない場合。あなたがなぜ私がこの奇妙なことを呼んでいるのか不思議に思っているのなら...その理由
1. ==オペレータを使用すると、すべてが正常です。 >、<のような他の演算子も同じエラーを生成します。
2.同じコードが別のマシンで動作しています。

私はそれがここでコードの問題だとは思わない。 Rubyと何か関係がありますか、またはRailsのインストールに問題がありますか?そのようなバグをキャッチする

答えて

2

誤差は、正確にはalog.log_dateがゼロであることを意味します。 alog.log_date>[email protected]_of_week()alog.log_date.>=(@dt.beginning_of_week())と同じです。つまり、>は単なるメソッド呼び出し(構文的な砂糖を含む)です。後者はゼロになる場合は、代わりにこのような何かを得るだろう:あなたがあれば、

if (alog.log_date && alog.log_date >= @dt.beginning_of_week() && alog.log_date<[email protected]_of_week()) 

しかし:

ArgumentError: comparison of Time with nil failed 

あなたは、行の先頭に日付の存在チェックを追加することができます日付は、フィールドの既定値やプレゼンスの検証を追加したくないと考えるべきではないと思います。

1

良い技術は、デバッガ

またはsimplier 1は、ログインするために値を書き込むことで添付することです、あなただけに置く必要があります。エラー行

Rails.logger.info(variable_to_log)

をPS

等価演算子 '=='はnilオブジェクトと同じように動作します。

比較演算子が整数クラスのみに存在する

+0

ありがとうサルバ!!今日は新しいことを学んだ! :P – rstarter

関連する問題