我會做
resources :projects, :shallow => true do
resources :tasks do
resources :comments
end
end
這是除了你自己在做什麼基本上不能產生projects_task
成員路徑(即projects/1/tasks/1
)了,他們會都只是task
組成路徑(即「/任務/ 1' )。
會員路徑包括show
,update
,delete
,edit
但project_tasks
收集路徑(即projects/1/tasks
)仍然是可用的。
收集路徑包括index
,create
,new
comment
路徑不會改變。 所有comment
路徑仍將包含前綴task/:task_id
。
結帳的resources
documentation更多信息上(上member
和collection
也該網頁上還詳細信息。)
但要真正解決你的問題
你需要查找的project_id
當您鏈接回到project_tasks
索引。所以你需要做
<%= link_to "Project Tasks Index", project_tasks_path(@task.project) %>
這樣Task#index
知道父項目在哪裏。這是兩種實現的解決方案。
查看UrlFor
documentation瞭解更多信息。
如果你想獲得一個@project
變量在Comment
視圖
然後你只需要仰望project
控制器,而不是在視圖等級。所以基本上
class CommentsController < ApplicationController
def show
@task = Task.find(params[:task_id])
@comment = @task.comments.find([:id])
@project = @task.project
end
end
這很好,你的解決方案,這是否意味着我仍然需要重新安排我的資源,如你的例子?將在控制器中找到項目ID並分配'project_tasks_path(@project,@task)也可以工作? – user979587 2012-03-28 04:32:27
您不必重新排列代碼,這只是一個建議。是的,你可以在你的控制器中設置一個'@ project'變量並且這樣做,但是因爲你要去'project_tasks'集合'index'路由,所以你只需要'@project'變量。如果你要去'project **'''''''''''''show''路由,那麼你需要'(@project,@task)'參數。 – Azolo 2012-03-28 04:46:12
對不起,我實際上要去任務展示,所以評論的父母。那意味着我需要做更晚的事情,我如何在控制器中分配項目變量?它會是這樣的@project = Project.find(params [:task.project])??? – user979587 2012-03-28 05:59:54