2013-04-25 127 views
1

我有三种模式:用户,属于音乐会,属于地区。用户正在收听某个地区的音乐会。模型属于与用户通过=>音乐会分别建立的关系。总计差额并计算总计

class Region < ActiveRecord::Base 
    has_many :concerts 
    has_many :users, :through => :concerts 
end 

我在用户模型中有一个start_time和end_time,以便我可以记录用户收听音乐会的分钟数。在用户视图我可以呈现由:

<%= user.start_time.to_i - user.end_time.to_i %> 

但随着怎么算总通过在演唱会级别的所有用户听的分钟数的挣扎。

@total = @users.sum(:group=>:concert, :conditions => [???]) 

回答

0

从我可以告诉,这应该在MySQL上工作,其他数据库将有这种事情自己的功能。我在搜索中看不到明显的便携式功能,但您可以尝试滚动您自己的计算。

@total = @users.sum(:select=>'TIMESTAMPDIFF(MINUTE, user.start_time, user.end_time) AS duration', :group=>:concert) 
+0

我只是以秒为单位计算时间,所以start_time始终为0,end_time为整数。我在视图的其他地方除以60来显示分钟数。上面的select语句如何处理更简单的数字?如start_time = 0和end_time = 360 – daved82 2013-04-25 02:20:03

+0

如果您想以秒为单位求和差值,并且end_time和start_time以秒为单位存储,那么它就是:'@total = @ users.sum(:select =>'end_time - start_time as持续时间',:组=>:演唱会)'。 – 2013-04-25 11:40:17

+0

Mysql ::错误:您的SQL语法有错误;检查与您的MySQL服务器版本相对应的手册,以便在':select =>“end_time - start_time as duration”,:group =>:concert_id}附近使用正确的语法。)AS sum_id FROM'at line 1:SELECT SUM :select =>“end_time - start_time as duration”,:group =>:concert_id})AS sum_id FROM'users' WHERE'users'.'concert_id' = 3 – daved82 2013-04-25 17:53:42