我正在开发一个需要检索每天总票数的应用程序

时间:2014-05-30 08:43:11

标签: ruby-on-rails

我正在开发一个需要检索每天总票数的应用程序。

我有以下迁移,

class CreateVotes < ActiveRecord::Migration
  def self.up
    create_table :votes, :primary_key => :vote_id do |t|
      t.string  :client_id
      t.integer :satlevel_id
      t.integer :service_id
      t.date  "date", :default => Date.today

      t.timestamps
    end
  end
end

class CreateSatlevels < ActiveRecord::Migration
  def self.up
    create_table :satlevels, :primary_key => :satlevel_id do |t|
      t.string :name

      t.timestamps
    end
  end
end

目前,我的控制器中有以下内容。

class AdminController < ApplicationController
  def index
    render :layout => 'admin'
  end

  def forth
    @votes = Vote.all
    @satlevel = Satlevel.all 
    @result = Satlevel.joins(:votes)
    @result2 = @result.find_by_sql("select name, date, count(*) as 'total_votes' from satlevels left join votes on satlevels.satlevel_id = votes.satlevel_id group by satlevels.satlevel_id ")
  end
end

这就是我认为的,

<tr width = "100%"> 
  <th>DATE</th>     
  <% @result2.each do |result| %> 
    <th><%= result.name%></th>
  <% end%>
</tr>

<% @result2.each do |result| %> 
  <tr> 
    <td><%= result.date %></td>
    <% @result2.each do |result| %>
      <td><%= result.total_votes %></td>    
    <% end %>
<% end %>

</tr>
<tr> 

这会输出每天的总票数,但不是每个日期都有一行,每个投票都有自己的行和日期以及总票数。

我需要帮助才能将一天内创建的所有对象的计数输出到一行

1 个答案:

答案 0 :(得分:1)

不完全确定你在这里问的是什么,但看起来你是按照satlevel_id进行分组而不是约会?从您的视图代码看,您似乎想要按日期和名称进行分组?

另外,您是不是在使用命名遵循Rails约定?您的satlevels表的ID实际上是satlevel_id还是只是id

假设您正在尝试计算名称和日期的出现次数并且您实际上正在使用Rails约定,以下是我将如何编写该方法:

def forth
  @result = Satlevel.select('satlevels.name, votes.date, count(votes.*) as total_votes')
                    .joins(:votes)
                    .group('satlevels.name, votes.date')
                    .order('satlevels.name, votes.date')
end