2

我有一个带有嵌套任务的列表对象。我创建了一个显示单个任务的页面,以及一个允许用户编辑单个任务的页面。我现在想添加从任务编辑页面上的列表中删除任务的功能。使用以下代码

<%= 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

我认为使用 delete 方法,我提供的 @task 只会通过 params 发送到 destroy 方法,但这个错误似乎表明这不是它的工作原理。那么如何正确销毁 Rails 中的嵌套资源呢?

编辑: 这是带有嵌套资源的路由文件:

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

    root :to => 'home#index'
end

谢谢您的帮助!

4

2 回答 2

5

你应该有@list设置,或者使用@task.list(假设你有一个属于关系),你可以执行以下操作:

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

干杯!

于 2011-12-21T06:35:48.127 回答
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对象。

于 2011-12-21T06:36:36.953 回答