我有以下两种型号:
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 =&gt; {associate1 =&gt; [requisition1,requisition2]}}
很抱歉很长的帖子,但我的问题是:有没有更好的方法来做到这一点,要么通过更好地利用group_by或使用一些ruby魔法来创建哈希/列表,或者两者兼而有之吗
提前致谢, 佩德罗
答案 0 :(得分: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