我正在尝试销毁属于某个类别模型的链接(通过我的浏览器)。我可以成功删除id
1
和category_id
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"}
的链接。查看我的开发数据库中的链接确认它们存在并且具有不是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'
我在俯瞰什么?有什么我可以尝试的吗?
答案 0 :(得分: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
答案 1 :(得分:1)
在您的category_link_path上,您应该传递您的类别以及您的链接。
之类的东西 category_link_path(@category, link)
此外,在您的控制器上,要查找您的类别,它应该看起来像Category.find(params[:category_id]