2011-10-12 27 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