2011-07-07 9 views
1

I持って、次の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を少しうまく利用するか、またはハッシュ/リストの作成にルビ魔法を使うか、あるいはその両方を行うかのどちらかです。あなたが素敵なテーブルにそれらをフォーマットした後、あなたが望む結果を得るために、直接SQLを使用して逃げることができるかもしれません事前に

おかげで、 ペドロ

+0

することは、あなたが思い付くものは何でも、あなたはあなたのモデルにそれを置く必要があります。http ://weblog.jamisbuck.org/2006/10/18/skinny-controller-fat-model – Ian

答えて

0

。時にはただ邪魔になるモデルを使用して:

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 
関連する問題