Ruby on rails 与两个控制器的会话

Ruby on rails 与两个控制器的会话,ruby-on-rails,model-view-controller,Ruby On Rails,Model View Controller,我有两个控制器:工人和任务 视图/工作者/索引包含: <% @workers.group_by(&:name).each do |name, workers| %> <tr> <td><%= name %></td> <td><%= workers.size %></td> </tr> <% end %> 这是视图/任务/索引: <% @

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

视图/工作者/索引
包含:

<% @workers.group_by(&:name).each do |name, workers| %>
  <tr>
    <td><%= name %></td>
    <td><%= workers.size %></td>
  </tr>
<% end %>
这是
视图/任务/索引

<% @task.each do |task| %>
  <tr>
    <td><%= task.name %></td>
    <td><%= task.task %></td>
    <td><%= task.done %></td>
  </tr>
<% 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.

首先,您可以通过删除不必要的
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) %>

谢谢!它几乎起作用了。我的问题是(例如)如果我单独按下worker的“ShowTasks”,我将被定向到:并且此页面为空,不显示我的任务索引页面..Rails默认行为是使用(数字)主键构建到资源的路径。如果您希望有一个友好的URL而不是<代码>工人/ 1 /任务>代码>,您可以考虑使用FalfLySID ID GEM:。
resources :workers do
    resources :tasks
end
workers/:id/tasks
<%= link_to 'All tasks', worker_tasks_path(worker) %>
or
<%= link_to 'All tasks', worker_tasks_path(worker.id) %>