2012-04-12 2 views
1

Я думаю, что у меня замерзли мозг, но я не могу понять, как это сделать ... Заранее спасибо за помощь.Если время обновлено дольше, чем X

У меня есть несколько полей в моей таблице местоположений, которые обновляется внешним скриптом каждые 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 

ответ

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 

Вам нужно вызвать метод объекта определения местоположения, и в этом случае вы вызываете тот, который мы только что определили, что будет возвращать истинным или ложным в зависимости от того, когда последний был сердцебиения ,

+0

Спасибо за ответ. Пришлось поставить «я» infront of not_ответ, но это порождает ошибку: «Сравнение символа с временем не удалось» ?? – simonmorley

+0

'self' определенно не объект, который не имеет значения? определенная на нем, поэтому я не знаю, какой метод вы вызываете в этом случае. – Veraticus

+0

о. Без self.not_ответ? Я получаю ошибку undefined метод 'not_ответ? – simonmorley

Смежные вопросы