在空字段上使用if / else的Rails实例方法

时间:2011-11-26 19:15:03

标签: ruby-on-rails

我在模型中编写了一个实例方法来计算两个日期之间的时差。在第二个日期存在时工作,但如果第二个日期不存在,则需要添加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 %>

1 个答案:

答案 0 :(得分:1)

错误应该在其他地方,因为nil?方法是在对象上定义的,而nil也是一个对象。

由于我的上一条评论可能有所帮助,可能您在Rails环境中的类定义已经过时,因此重新启动应用程序会迫使Rails重新加载源代码。

您还可以使用reload!方法重新加载类,例如在Rails控制台中。