2013-04-26 106 views
0

我正在寫一個簡單的待辦事項應用程序,其中有項目和項目有很多任務。我希望能夠刪除項目中的任務。但是當我嘗試link_to一個刪除方法,我得到未定義的方法'task_path'。Rails刪除鏈接嵌套的路線

視圖代碼

<ul> 
    <% @project.tasks.each do |task| %> 
    <li><%= task.name %></li> <%= link_to "delete", task, :method => :delete %></br> 
    <% end %> 
</ul> 

任務控制器

def destroy 
    @project = Project.find(params[:project_id]) 
    @task = @project.tasks.find(params[:id]) 
    @task.destroy 
    redirect_to @project, :notice => "Task Deleted" 
    end 

的routes.rb

resources :projects do 
    resources :tasks 
    end 

更新: 所以我必須刪除工作。但是現在,當我遍歷每個任務時,還有一個額外的刪除鏈接,路由到http://todoapp.dev/projects/9/tasks,並且沒有路由匹配[DELETE]「/ projects/9/tasks」爲什麼會有額外的刪除鏈接?

<% @project.tasks.each do |task| %> 
    <%= task.name %> <%= link_to "delete", [@project, task], :method => :delete %> 
    <% end %> 

enter image description here

enter image description here

+0

看看到[Rails的指南:嵌套資源(http://guides.rubyonrails.org/routing.html#nested-resources)。 – Pigueiras 2013-04-26 12:28:38

+0

它可能需要項目ID,你可以發佈你運行'rake routes'後得到的嗎? – 2013-04-26 12:30:02

回答

7

請試試這個:

<%= link_to "delete", [@project, task], :method => :delete %> 

,讓我知道

+0

這對我有用。看起來我必須通過@project變量來獲取任務的路徑。謝謝! – nulltek 2013-04-26 12:48:50

+0

我在上面的更新問題中列出了額外的刪除。不知道爲什麼那裏。我究竟做錯了什麼? – nulltek 2013-04-26 13:00:33

+0

wha的'<%= debug @ project.tasks%>'輸出? ! – 2013-04-26 13:27:24

0

運行rake routes你會看到,刪除映射到project_task。

您可以使用

<ul> 
    <% @project.tasks.each do |task| %> 
    <li><%= task.name %></li> <%= link_to "delete", project_task_path(@project, task), :method => :delete %></br> 
    <% end %> 
</ul> 
+0

這是有道理的。但是當我嘗試這樣做並刪除一個任務時,我得到以下內容。沒有路線匹配{:action =>「show」,:controller =>「tasks」,:project_id =>#,:id =>#<任務id:nil,名稱:nil,created_at:nil,updated_at:nil,project_id:9,已完成:false> } – nulltek 2013-04-26 12:44:31

+0

嗯..這意味着該方法沒有正確設置爲:刪除,所以它做了一個正常的請求。順便說一下,在你的評論中,如果它的id是nil,你將如何刪除一個任務? – 2013-04-26 12:47:33

+0

我不確定。我不確定它爲什麼會顯示爲零。對此有何想法? – nulltek 2013-04-26 12:51:00