2012-12-23 2 views
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입니다 :

: 나는 내 오류가 때문에 내가 올바르게 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을 정의

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

Routing Error 

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

답변

1

먼저 불필요한 match 지시문을 제거하여 경로를 단순화 할 수 있습니다. 선언함으로써 :

resources :workers do 
    resources :tasks 
end 

작업 자원에 작업 자원을 중첩했습니다. 귀하의 작업 인덱스는 사용하여 액세스 할 수 있습니다 :

id이 작업자 모델의 기본 키
workers/:id/tasks 

.

레일 경로 도우미는 단수/복수형에 민감합니다. link_to 호출의 경로는 작업 목록 (복수)을 포함하는 특정 작업자 (단수)에 해당합니다. Rails 라우터는 id 매개 변수로 기본 키 또는 모델 인스턴스를 기대합니다.

<%= link_to 'All tasks', worker_tasks_path(worker) %> 
or 
<%= link_to 'All tasks', worker_tasks_path(worker.id) %> 
+0

감사합니다! 거의 작동합니다. 내 문제는 (예를 들어) 알론 직원의 "작업 표시"를 누르면 http : // localhost : 3000/workers/alon/tasks 페이지로 이동하게되며이 페이지는 비어 있으며 작업의 내 색인 페이지를 표시하십시오. –

+1

레일즈 기본 동작은 (숫자) 기본 키를 사용하여 자원에 대한 경로를 작성하는 것입니다. 'workers/1/tasks' 대신에 친숙한 URL을 원한다면 friendly_id 젬 (https://github.com/norman/friendly_id)을 사용해보십시오. – Jef

관련 문제