2011-10-25 21 views
0

お願いします。オンラインとオフラインのフィールドがあるテーブルがあります。>人がオンラインとオフラインになったとき。人がまだオンラインの場合、オフラインフィールドはNULLに等しく、人がオフラインになった後にのみ更新されます。アクティブレコード合計計算

そして、私は人のseansesの期間を計算する必要がありますが、SQLを使用しています。 私は2つのスコープを持っている:

個人レコードをフィルタリングするために私を助け
scope :since, lambda { |date| where(["online >= ?", date.to_time.midnight]) } 
scope :upto, lambda { |date| where(["online <= ?", date.to_time.end_of_day]) } 

。 必要な範囲を適用した後、どのくらい正確に時間を計算できますか? (または他の何らかの声明)。 activerecordにIF NULLのようなものがありますか?これが本当に存在する場合はどうすれば使用できますか?

ありがとうございます!

答えて

1

もう一度sum機能を使用できます。

Model.where(...condition....).sum("IFNULL(offline, CURRENT_TIMESTAMP)-online") 

そして、私はあなたは、単に私が「#{Time.current.utc}」でCURRENT_TIMESTAMPを交換し、それが正常に動作します。この例では

+0

を使用し、和メソッドを追加することができスコープに思います。ありがとうございました! – ValeriiVasin