在tasks_controller中,我定义了:
def index
@tasks = Task.all
respond_to do |format|
format.html # index.html.erb
format.json { render json: @tasks }
end
end
我的表中有三个参数:name,task,done。
现在,我想制作:
<table>
<tr>
<th>Name</th>
<th>num of tasks</th>
<th>num tasks left</th>
</tr>
<% @tasks.group_by(&:name).each do |name, tasks| %>
<tr>
<td><%= name %></td>
<td><%= tasks.size %></td>
<td> here I want to produce the number of tasks left </td>
</tr>
<% end %>
</table>
如何才能获得剩余的任务数量?我认为应该是这样的:
<% @tasks.group_by(&:name).each do |name, tasks| %>
<tr>
<td><%= name %></td>
<td><%= tasks.size %></td>
<% @tasks.group_by(name, :done => "yes").each do |name, tasks| %>
<td><%= tasks.size %></td>
<% end %>
</tr>
<% end %>
答案 0 :(得分:1)
你有个好主意;)
<% @tasks.group_by(&:name).each do |name, tasks| %>
<tr>
<td><%= name %></td>
<td><%= tasks.size %></td>
<td><%= tasks.select{ |task| task.done != 'yes' }.size %></td>
</tr>
<% end %>
tasks.select{ |task| task.done != 'yes' }
:这将选择完成不是的任务,将其放入数组并计算其大小(尚未完成的任务数)。
我强烈建议您将@tasks变量设置为如下(性能要低得多:数据库为您完成工作!)
# in the controller
@tasks = Task.count(:group => 'name') #instead of @tasks = Task.all
它与@tasks.group_by(...)
具有相同的输出,但执行时间要好得多。