2011-07-07 20 views
1

我有以下2种型号:的Rails 3:集团按日期和另一列

Requisition 
    created_date 
    associate_id 
    value 
Associate 
    id 
    name 

我试图想出一个方式来显示每月一个表/年,因为这样的:

07/2011 
Associate name | Number of requisitions | Total value 
associate 1 | 2      | 300 
... 

08/2011 
Associate name | Number of requisitions | Total value 
associate 1 | 3      | 450 
associate 2 | 1      | 100 
... 

等等。

这是我目前的控制器代码:

@search = Requisicao.search(params[:search]) 
temp = @search.all(:conditions => {:status_index => Requisicao::STATUSES.index('aprovada')}) 
@requisicaos = {} 
temp.group_by { |t| t.data_efectiva.beginning_of_month }.each do |data, reqs| 
    @requisicaos[data] = {} 
    reqs.each do |req| 
    @requisicaos[data][req.socio] = [] unless not @requisicaos[data][req.socio].nil? 
    @requisicaos[data][req.socio] << req 
    end 
end 

记住我使用的元搜索和我的查询另一个(无关紧要的)条件。我在这里完成的是散列哈希,如下所示:{date1 => {associate1 => [requisition1,requisition2]}}

对不起,很长的文章,但我的问题是:有没有更好的方法通过利用group_by好一点,或者使用一些ruby魔法来创建哈希/列表,或者两者兼而有之?

由于提前, 佩德罗

+0

不管你想出,你应该把它放在你的模型HTTP ://weblog.jamisbuck.org/2006/10/18/skinny-controller-fat-model – Ian

回答

0

你也许能够逃脱使用SQL直接得到你想要的结果,然后将其格式化为一个不错的表。有时使用这些模型只是得到的方式:

SELECT associates.name, COUNT(requisitions.id) AS requisition_count, SUM(requisitions.value) AS requisition_value, requisition.created_date AS requisition_date 
    FROM associates 
    LEFT JOIN requisitions ON requisitions.associate_id=associates.id 
    GROUP BY requisition.created_date 

可以包装成一个类的方法是为了保持它组织:

class Associate < ActiveRecord::Base 
    def self.requisitions_by_date 
    # Insert the query described above as the argument here 
    self.connections.select_all("...").group_by do |row| 
     row['requisition_date'] 
    end 
    end 
end