【问题标题】:Improperly routed Rails Destroy method on nested resource嵌套资源上路由不正确的 Rails Destroy 方法
【发布时间】:2012-01-25 00:38:47
【问题描述】:

我有一个带有嵌套任务的 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

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

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

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

    root :to => 'home#index'
end

感谢您的帮助!

【问题讨论】:

  • 由于是路线问题,请在问题中添加您的routes.rb。

标签: ruby-on-rails ruby destroy nested-resources


【解决方案1】:

你应该有@list设置,或者使用@task.list(假设你有一个属于关系),你可以做到以下几点:

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

干杯!

【讨论】:

    【解决方案2】:

    试试这个:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-05
      • 1970-01-01
      • 2011-05-23
      • 1970-01-01
      • 1970-01-01
      • 2011-06-13
      相关资源
      最近更新 更多