Ruby on rails 如何对分组后的字段求和

Ruby on rails 如何对分组后的字段求和,ruby-on-rails,postgresql,activerecord,group-by,Ruby On Rails,Postgresql,Activerecord,Group By,我需要按日期对一些记录进行分组,然后对每个日期的一个字段求和 这是我试图重构的代码: <% @startdate.upto(@enddate) do |date| %> <% visitors = @links.where("created_at >= ? AND created_at < ?", date, date+1).order("created_at ASC").select("id, visit_count") %> <%= date

我需要按日期对一些记录进行分组,然后对每个日期的一个字段求和

这是我试图重构的代码:

<% @startdate.upto(@enddate) do |date| %>
  <% visitors = @links.where("created_at >= ? AND created_at < ?", date, date+1).order("created_at ASC").select("id, visit_count") %>
  <%= datevisitors.sum("visit_count") || 0 %>
<% end %>

我从以下几点开始:

<% visitors = @links.select("visit_count, created_at").group_by{|l| l.created_at.day} %>
<% @startdate.upto(@enddate) do |date| %>
  <%= visitors[date] ...?
<% end %>


这应该在控制器上

@dates_with_visitors = @links.select("visit_count, created_at").group_by(&:created_at)
这应该在视图上

<% @dates_with_visitors.each do |date_with_visitors| %>
  <%= "#{date_with_visitor[0]} - Visits: #{date_with_visitors[1].sum(&:visit_count)}" %>
<% end %>

当你按某物分组时,你会收到一个日期和元素的数组。因此,如果您按天分组,您将拥有日期和数组中的元素:

<% @links.group_by{|l| l.created_at.day}.each do |day, links| %>
  <p><%= day %>: <%= links.sum(&:visit_count) %></p>
<% end %>
然后,在视图中:

<% daily_visits(@links, @startdate, @enddate).each do |day, count| %>
  <%= day %>: <%= count %>
<% end %>

: 

嗨,你能告诉我要用的型号吗

下面是我在带有聚合和函数的Activerecord上的示例:

<% @sum_visit_count = Visitor.find(:all, :select => "SUM(visit_count)", :group => "id, date_visit") %>

and 

<%= @sum_visit_count.sum %>
“总和(就诊次数)”,:组=>“id,就诊日期”)%>
及

谢谢你的回答,杰西。在我的情况下,@links不一定每天都有正值,因此此解决方案可以掩盖0值天数。@sCerrus我更新了我的答案以显示解决方案中的0天
<% daily_visits(@links, @startdate, @enddate).each do |day, count| %>
  <%= day %>: <%= count %>
<% end %>
<% @sum_visit_count = Visitor.find(:all, :select => "SUM(visit_count)", :group => "id, date_visit") %>

and 

<%= @sum_visit_count.sum %>