0

我有两个控制器:工人和任务。

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 回答