我在模型中编写了一个实例方法来计算两个日期之间的时差。在第二个日期存在时工作,但如果第二个日期不存在,则需要添加if else
条件以返回字符串。我有
class Incident
def calculate_elapsed(difference)
if self.closed.nil?
@difference = "Open"
else
d1 = self.created
d2 = self.closed
difference = d2 - d1
@difference = difference.to_i
end
当我尝试加载一个事件,我知道这个事件有一个空的closed
日期
You have a nil object when you didn't expect it!
You might have expected an instance of Array.
The error occurred while evaluating nil.-
错误,因为我认为if self.closed.nil?
正在检查零对象。我该怎么做才能让它发挥作用?
我不确定这是处理我正在尝试做什么的正确方法,所以对任何和所有建议开放(即这应该是一个类方法,助手等等。它曾经在我的控制器之前和认为这是朝着正确方向迈出的一步。)
更令人困惑的是,我可以部分调用此方法,并且只要关闭日期不存在,它就会返回“打开”字符串。
修改
这就是我的工作 -
型号:
class Incident
def calculate_elapsed
if self.closed.blank?
@difference = "Complaint Open"
else
d1 = created
d2 = closed
difference = d2 - d1
difference_clean = difference.to_i
@difference = difference_clean.to_s + ' Days'
end
end
show.html.erb
<%= @incident.calculate_elapsed %>
_incidents.html.erb partial
<%= incident.calculate_elapsed %>
答案 0 :(得分:1)
错误应该在其他地方,因为nil?
方法是在对象上定义的,而nil
也是一个对象。
由于我的上一条评论可能有所帮助,可能您在Rails环境中的类定义已经过时,因此重新启动应用程序会迫使Rails重新加载源代码。
您还可以使用reload!
方法重新加载类,例如在Rails控制台中。