Alo*_*iel 1 mysql ruby-on-rails
我需要按名称对查询结果进行分组,并显示每个名称的结果数量.
控制器:
def show
@task = Task.where(:name => params[:name])
respond_to do |format|
format.html # show.html.erb
format.json { render json: @task }
end
end
Run Code Online (Sandbox Code Playgroud)
我需要定义输出如下内容的东西:
show.html.erb:
Name | # of Tasks
Alan | 2
Bob | 1
Run Code Online (Sandbox Code Playgroud)
我怎么能做到这一点?谢谢.
您可以使用以下group_by
方法:
@tasks.group_by(&:name)
# this will output:
{
'Ben' => [<Task id:(...)>],
'Alon' => [<Task id:(...)>, <Task id:(...)>, ...],
#...
}
Run Code Online (Sandbox Code Playgroud)
在您的视图中,您可以像这样使用它:
<% @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 %>
Run Code Online (Sandbox Code Playgroud)
您也可以只在一个SQL请求中执行此操作:
Task.count(:group => 'name')
# should return a Hash like:
{
'Ben': 2,
'Alon': 5,
# ...
}
Run Code Online (Sandbox Code Playgroud)
如何在您的视图中使用它?
<% @tasks_count.each do |task_name, task_count| %>
<tr>
<td><%= task_name %></td>
<td><%= task_count %></td>
</tr>
<% end %>
Run Code Online (Sandbox Code Playgroud)