0

tasks_controllerで、次のように定義しました。

def index
    @tasks = Task.all

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

テーブルには、名前、タスク、完了の3つのパラメーターがあります。

今、私は生産したい:

<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 変数を設定することを強くお勧めします (パフォーマンスが大幅に低下します: DB が作業を行います!)

# in the controller
@tasks = Task.count(:group => 'name') #instead of @tasks = Task.all

出力は と同じ@tasks.group_by(...)ですが、実行時間ははるかに優れています。

于 2012-12-22T01:58:34.667 に答える