Ruby on rails 为什么ActiveRecord只查找id为1的模型对象?
我正在尝试销毁属于类别模型的链接(通过我的浏览器)。我可以成功删除id为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的链接!但我在请求参数中看到,它总是试图
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