2011-10-25 138 views
0

请帮助我。我有一些在线和离线字段=>当人上线和离线时。如果用户仍在线,则离线字段等于NULL,并且只有在用户离线后才会更新。Activerecord总和计算

而且我需要计算人员的时间长短,但使用sql。 我有两个范围:

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") 

而且我认为一个范围,你可以简单地添加总和方法我在这个例子中

+0

使用我更换CURRENT_TIMESTAMP以“#{} Time.current.utc”,它工作正常。谢谢! – ValeriiVasin