如果时间在大于X的时候更新了

时间:2012-04-12 14:48:42

标签: ruby-on-rails

我想我在这里有一个大脑冻结,但我无法找到最好的方法来做到这一点......在此先感谢您的帮助。

我的位置表中有一些字段每5分钟由外部脚本更新一次。如果他们的更新时间超过1小时,则会向网站管理员发送一封电子邮件。

获得死亡地点列表相当简单:

 scope :not_responding, lambda {
    where('last_heartbeat < ?', Time.now - 1.hour )
  }

我所坚持的应该是非常简单的....我想要做的就是更改位置名称的样式,如果它没有响应,它就会变红。

%td
  - @locations.each do |locations|    
    = if ('locations.last_heartbeat < ?', Time.now - 1.hour )  
      red
    -else
      green

但是这会引发错误(意外的&#39;,&#39;)

有人可以建议如何将其移入我的模型吗?

- 更新 -

我不确定这是一个错误还是什么,但我看到了一些奇怪的结果。

使用下面的答案,我已经添加了这个:

def not_responding?
    last_heartbeat < (Time.now - 1.hour)
  end

并致电:

- if location.not_responding?
  red
- else
  green

然而,这给了我一个关于&#39;&lt;&#;未定义。

最后,我必须这样做才能让它发挥作用。一切看起来都很荒谬......

 def not_responding
   last_heartbeat <=> (Time.now - 1.hour)
 end

在视图中:

- if (hotspot.not_responding_two == -1)
  red
- else
  green

没有意义,因为以下测试没问题:

def test?
  Time.now > (Time.now - 1.hour)
end

1 个答案:

答案 0 :(得分:6)

可能最简单的方法是:

class Location < ActiveRecord::Base
  def not_responding?
    last_heartbeat < (Time.now - 1.hour)
  end
end

我扔了一个问号,因为这是一个布尔方法。在您看来:

%td
  - @locations.each do |location|    
    -if location.not_responding?
      red
    -else
      green

您需要在location对象上调用一个方法,在这种情况下,您将调用我们刚刚定义的方法,这将返回true或false,具体取决于最后一次心跳的时间。