0

我正在尝试销毁属于类别模型的链接(通过我的浏览器)。我可以成功删除具有idof1category_idof的链接1,但是当我尝试删除具有任何其他 id 的链接时,我会遇到:

ActiveRecord::RecordNotFound in LinksController#destroy
Couldn't find Link with id=1 [WHERE "links"."category_id" = 1]

非常令人沮丧,因为我不想删除 id 为 1 的链接!但是我在请求参数中看到它总是试图删除带有 的链接"category_id"=>"1", "id"=>"1"},无论我点击什么链接。查看我的开发数据库中的链接确认它们存在并且 ID 不是 1...

这是 LinksController#destroy 的代码:

class LinksController < ApplicationController

def destroy
    @category = Category.find(params[:id])
    @link = @category.links.find(params[:id])
    @link.destroy
    redirect_to category_url(@category)
end

这是我试图删除这些讨厌的链接的视图的代码:

<h1><%= @category.category %></h1>
<p><%=  @category.description %></p> 
<ul>
    <% @category.links.each do |link| %>
    <li>
    <%= link_to link.title, link.url %> |
    <%= link_to "delete", category_link_path(@category), :method => :delete %>
    </li>
 <% end %>

编辑:添加参数

{"_method"=>"delete",
 "authenticity_token"=>"[removed]",
 "category_id"=>"1",
 "id"=>"1"}

编辑:添加 config/routes.rb:

LinkManager::Application.routes.draw do

  resources :categories do
    resources :links, only: [:create, :destroy]
  end

  root :to => 'categories#index'

我在看什么?有什么我可以尝试的吗?

4

2 回答 2

1

你的电话category_link_path是省略了一些东西。也许它应该看起来像这样?

<%= link_to "delete", category_link_path(@category, link), :method => :delete %>

看起来您正在category_id通过传入 来完成路线的一部分@category,但您还需要link提供id.

然后你需要修复你的destroy行为:

def destroy
  @category = Category.find(params[:category_id])
  @link = @category.links.find(params[:id])
  @link.destroy
  redirect_to category_url(@category)
end
于 2012-11-14T15:18:46.920 回答
1

在您的 category_link_path 上,您应该传递您的类别和链接。就像是

category_link_path(@category, link)

此外,在您的控制器上,要找到您的类别,它应该看起来像Category.find(params[:category_id]

于 2012-11-14T15:19:12.927 回答