2011-12-21 100 views
2

我有一個List對象,嵌套任務。我創建了一個顯示單個任務的頁面,還創建了一個允許用戶編輯單個任務的頁面。我現在想添加從任務編輯頁面的列表中刪除任務的功能。使用下面的代碼錯誤路由Rails嵌套資源破壞方法

<%= link_to 'Delete this task',@task, confirm: 'Are you sure?', method: :delete %> 

產生

undefined task_path method 

此代碼是show.html.erb頁面,在這裏我呼籲@task以顯示所有存儲在任務中的數據的,所以我相信這個問題可能是某種路由錯誤,但我似乎無法弄清楚。

相關的控制器方法是

def destroy 
    @task = Task.find(params[:id]) 
    @task.destroy 

    respond_to do |format| 
     format.html { redirect_to list_tasks_path(@task) } 
     format.json { head :ok } 
    end 
end 

我認爲用刪除法我提供的@task也只是通過PARAMS發送到毀滅的方法,但這個錯誤似乎表明這ISN」確切地說它是如何工作的。那麼我怎樣才能正確地銷燬Rails中的嵌套資源?

編輯: 這裏是路線文件嵌套資源:

MyApp::Application.routes.draw do 
    resources :lists do 
     resources :tasks 
    end 
    get "home/index" 

    root :to => 'home#index' 
end 

謝謝您的幫助!

+0

由於這是路由問題,請將您的'routes.rb'添加到問題中。 – Mischa

回答

5

你應該有@list設置,或使用@ task.list(假設你有一個屬於關係),你可以做到以下幾點:

<%= link_to "Delete this task", list_task_path(@task.list, @task), confirm: "Are you sure?", method: :delete %> 

乾杯!

+0

這就像一個魅力,謝謝你! –

4

試試這個:

<%= link_to 'Delete this task', list_task_path(@list, @task), confirm: 'Are you sure?', method: :delete %> 

或者,如果你想讓它更緊湊(就像你寫的吧):

<%= link_to 'Delete this task', [@list, @task], confirm: 'Are you sure?', method: :delete %> 

無論哪種方式,因爲它是一個嵌套的資源,你必須通過@list@task對象。