2012-04-12 17 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 

しかし、それは(「」予期しない)エラーがスローされます

誰もが私のモデルにこれを移動する方法を提案することはできますか?

- UPDATED -

これはバグか何かである場合、私はわからないが、私はいくつかの奇妙な結果を見ています。

以下の答えを使用して、私はこれを追加しました:

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 

をばかげているようだし、ビューに:

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

答えて

6

おそらく最も簡単な方法は、次のようになります。次のテストはOKだったとして

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

は意味がありませんこのようなもの:

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を返すなる、私たちは定義されたものを呼んでいます。

+0

返信いただきありがとうございます。 not_respondingの前に「自己」を置かなければならなかったが、それはエラーを投げている。「時間とシンボルの比較に失敗した」 – simonmorley

+0

'self'は間違いなくnot_respondingオブジェクトですか?それで定義されているので、私はあなたがこの場合どのような方法を呼びかけているのか分かりません。 – Veraticus

+0

oh。 self.not_respondingなし?私は定義されていないメソッド 'not_responding? – simonmorley

関連する問題