2011-12-21 98 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对象。