我正在开发一个需要检索每天总票数的应用程序。
我有以下迁移,
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>
这会输出每天的总票数,但不是每个日期都有一行,每个投票都有自己的行和日期以及总票数。
我需要帮助才能将一天内创建的所有对象的计数输出到一行
答案 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