0

ワーカーとタスクの 2 つのコントローラーがあります。

views/workers/index内容:

<% @workers.group_by(&:name).each do |name, workers| %>
  <tr>
    <td><%= name %></td>
    <td><%= workers.size %></td>
  </tr>
<% end %>

すべてのワーカーとそのタスク数が表示されます。

「すべてのタスクを表示」という名前の別の < td >を追加し、ワーカー X のすべてのタスクを表示します。

そのためには、次のようなものが必要だと思います。

<td><%= link_to 'show all tasks', worker_task_path(name) %></td>

したがって、私は持っていますtasks_controller

def index
    @task = Worker.where(:name => params[:id]) respond_to do |format|
        format.html # show.html.erb
        format.json { render json: @worker }
    end
end

これはviews/tasks/index次のとおりです。

<% @task.each do |task| %>
  <tr>
    <td><%= task.name %></td>
    <td><%= task.task %></td>
    <td><%= task.done %></td>
  </tr>
<% end %>

さらに、次のように定義しましたroutes.rb

TODO::Application.routes.draw do
   #resources :workers
   #root to:"workers#index"

   match '/workers/:id/index', :to => 'tasks#index', :as => 'index_task'

   resources :workers do
   resources :tasks

end

エラーが次のとおりであるため、routes.rb を正しく定義していないと思います。

Routing Error

No route matches {:action=>"show", :controller=>"tasks", :worker_id=>"alon"}
Try running rake routes for more information on available routes.
4

1 に答える 1

1

まず、不要なmatchディレクティブを削除してルートを簡素化できます。宣言することにより:

resources :workers do
    resources :tasks
end

タスク リソースをワーカー リソースにネストしました。タスク インデックスは、次を使用してアクセスできます。

workers/:id/tasks

idワーカー モデルの主キーです。

Rails パス ヘルパーは、単数形/複数形に敏感です。呼び出しのパスは、link_toタスクのリスト (複数) を含む特定のワーカー (単数) に対応します。Rails ルーターは、主キーまたはモデル インスタンスを id パラメーターとして想定します。

<%= link_to 'All tasks', worker_tasks_path(worker) %>
or
<%= link_to 'All tasks', worker_tasks_path(worker.id) %>
于 2012-12-23T15:57:38.920 に答える