1

クエリの結果を名前でグループ化し、名前ごとに結果の量を表示する必要があります。

コントローラ:

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

どうすればそれを達成できますか?ありがとう。

4

2 に答える 2

5

group_byメソッドを使用できます:

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

より良い方法

1 つの 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 %>
于 2012-12-21T15:50:58.023 に答える
0

ようしじさんが正解でした。ただし、単一の SQL リクエストで必要な情報を取得できます。

@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 %>
于 2012-12-21T15:57:17.607 に答える