2011-10-12 47 views
0

我在我的一個rails 2.3.2應用程序中出現了這個奇怪的錯誤。Rails 2.3.2中的NoMethodError應用程序

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爲零。但是,快速檢查之前線#27(檢查這裏不包括)顯示以下值:

現在,如果沒有這些值都爲零,爲什麼我得到線#27這個 undefined method >= for nil:NilClass錯誤
#alog.log_date 
Wed, 09 Feb 2011 

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

。如果你們想知道爲什麼我把這叫做奇怪的......因爲
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一個是將值寫入日誌,你應該只把:

Rails.logger.info(variable_to_log)

之前錯誤行

PS

它與等號運算符'=='一起使用,因爲nil對象有此方法

您的比較運算符僅存在於整數類中

+0

謝謝sarva!今天學到了新東西! :P – rstarter