在嵌套资源上不正确路由Rails Destroy方法



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

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

我认为,与删除方法@任务我提供将只是通过参数发送到销毁方法,但这个错误似乎表明,这不是它的工作方式。那么,如何在Rails中正确地销毁嵌套资源呢?

编辑:

下面是带嵌套资源的路由文件:

MyApp::Application.routes.draw do
    resources :lists do
        resources :tasks
    end
    get "home/index"
    root :to => 'home#index'
end

谢谢你的帮助!

您应该设置@list,或者使用@task。列表(假设您有一个归属关系),您可以执行以下操作:

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

干杯!

试试这个:

<%= 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对象。

最新更新