Ruby on rails 为什么ActiveRecord只查找id为1的模型对象?

Ruby on rails 为什么ActiveRecord只查找id为1的模型对象?,ruby-on-rails,activerecord,Ruby On Rails,Activerecord,我正在尝试销毁属于类别模型的链接(通过我的浏览器)。我可以成功删除id为1且id为1的category\u id的链接,但当我尝试删除具有任何其他id的链接时,我会遇到以下问题: ActiveRecord::RecordNotFound in LinksController#destroy Couldn't find Link with id=1 [WHERE "links"."category_id" = 1] 非常令人沮丧,因为我没有试图删除id为1的链接!但我在请求参数中看到,它总是试图

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

ActiveRecord::RecordNotFound in LinksController#destroy
Couldn't find Link with id=1 [WHERE "links"."category_id" = 1]
非常令人沮丧,因为我没有试图删除id为1的链接!但我在请求参数中看到,它总是试图删除带有
“category\u id”=>“1”的链接,
“id”=>“1”}
,无论我点击哪个链接。查看我的开发数据库中的链接,确认它们存在,并且ID不是1

以下是LinksController#destroy的代码:

编辑:添加了config/routes.rb:

LinkManager::Application.routes.draw do

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

  root :to => 'categories#index'

我忽略了什么?有什么我可以试试的吗?

你打给
分类链接路径的电话有问题。也许应该是这样的

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

在你的分类链接路径上,你应该传递你的分类和链接。差不多

category\u link\u路径(@category,link)


另外,在您的控制器上,要查找您的类别,它应该看起来像
category.find(params[:category\u id]

非常奇怪:
@category=category.find(params[:id])@link=@category.links.find(params[:id])
您使用相同的
params[:id]
找到一个
类别
对象和一个
链接
,这肯定不起作用!你能添加
参数的输出吗?当你试图破坏链接时请检查
?我是Rails新手,你能解释一下为什么不起作用吗?会编辑并添加参数。嗯,你能尝试使用
链接路径(Link)吗
而不是
类别链接路径(@category)
并显示参数?@MrYoshiji,将URI更改为链接路径(link)给我一个NoMethodError异常,我想是因为我的links资源嵌套在routes.rb中的categories资源下?这不会改变_pathlinks吗?嗯…我做了更改,现在我根本无法查看页面,只看到:
路由错误没有路由匹配{:action=>“destroy”,:controller=>“links”,:category_id=>#,:id=>#
我认为帮助者应该被称为
类别链接路径
,而不是
类别链接路径
。试试看。相应地更新了我的答案。抱歉。帮助者路径名称不正确。抱歉,我的线路错了。谢谢你的帮助!不幸的是,现在我看到了:
未定义的方法“类别链接路径”
>.哦,好吧!如果你看一下错误消息,你会发现由于某种原因,
link
nil
。你知道为什么吗?
{"_method"=>"delete",
 "authenticity_token"=>"[removed]",
 "category_id"=>"1",
 "id"=>"1"}
LinkManager::Application.routes.draw do

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

  root :to => 'categories#index'
<%= link_to "delete", category_link_path(@category, link), :method => :delete %>
def destroy
  @category = Category.find(params[:category_id])
  @link = @category.links.find(params[:id])
  @link.destroy
  redirect_to category_url(@category)
end