我需要按名称对查询结果进行分组,并显示每个名称的结果数量。
控制器:
def show
@task = Task.where(:name => params[:name])
respond_to do |format|
format.html # show.html.erb
format.json { render json: @task }
end
end
我需要定义输出类似内容的东西:
show.html.erb :
Name | # of Tasks
Alan | 2
Bob | 1
我怎样才能做到这一点? 感谢。
答案 0 :(得分:5)
您可以使用group_by
method:
@tasks.group_by(&:name)
# this will output:
{
'Ben' => [<Task id:(...)>],
'Alon' => [<Task id:(...)>, <Task id:(...)>, ...],
#...
}
在您看来,您可以像这样使用它:
<% @tasks.group_by(&:name).each do |name, tasks| %>
<tr>
<td><%= name %></td>
<td><%= tasks.size %></td> # the tasks variable is an Array of Tasks
</tr>
<% end %>
您也可以只在一个SQL请求中执行此操作:
Task.count(:group => 'name')
# should return a Hash like:
{
'Ben': 2,
'Alon': 5,
# ...
}
如何在视图中使用它?
<% @tasks_count.each do |task_name, task_count| %>
<tr>
<td><%= task_name %></td>
<td><%= task_count %></td>
</tr>
<% end %>
答案 1 :(得分:0)
@task_counts = Task.group(:name).count
# this will output:
{
'Ben' => 1,
'Alon' => 2,
#...
}
用法:
<% @task_counts.each do |name, count| %>
<tr>
<td><%= name %></td>
<td><%= count %></td>
</tr>
<% end %>