我有一个List对象,带有嵌套的Tasks。我创建了一个显示单个任务的页面,还有一个允许用户编辑单个任务的页面。我现在想要添加从任务编辑页面上的列表中删除任务的功能。使用以下代码
<%= 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
感谢您的帮助!
答案 0 :(得分:5)
你应该有@list设置,或者使用@ task.list(假设你有属于关系),你可以做以下事情:
<%= link_to "Delete this task", list_task_path(@task.list, @task), confirm: "Are you sure?", method: :delete %>
干杯!
答案 1 :(得分: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
对象。