1

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

我的位置表中有一些字段每 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

但这会引发错误(意外的',')

谁能建议如何将其移至我的模型中?

- 更新 -

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

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

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

并使用:

- if location.not_responding?
  red
- else
  green

但是,这给了我一个关于“<”未定义的错误。

最后,我不得不这样做才能让它工作。一切似乎都很荒谬......

 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
4

1 回答 1

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

您需要在位置对象上调用一个方法,在这种情况下,您调用的是我们刚刚定义的方法,它将根据上次心跳的时间返回 true 或 false。

于 2012-04-12T15:23:30.900 回答