0

在 tasks_controller 中,我定义了:

def index
    @tasks = Task.all

    respond_to do |format|
       format.html # index.html.erb
       format.json { render json: @tasks }
    end
end

我的表中有三个参数:名称、任务、完成。

现在,我想制作:

<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 %>
4

1 回答 1

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(...)但执行时间要好得多。

于 2012-12-22T01:58:34.667 回答