无法找到ID = ActiveRecord :: RecordNotFound的“对象”

时间:2011-07-09 20:18:22

标签: ruby-on-rails ruby-on-rails-3

每次我删除或销毁一个产品时,它都会在我的控制台中给我这个错误:

ActiveRecord::RecordNotFound (Couldn't find Product with ID=4):
  app/controllers/products_controller.rb:16:in `show'

并在页面上给出:

ActiveRecord::RecordNotFound in ProductsController#show

Couldn't find Product with ID=4

在我的产品控制器中,我只有常规脚手架:

def show
    @product = Product.find(params[:id])

    respond_to do |format|
      format.html # show.html.erb
      format.xml  { render :xml => @product }
    end
  end

def destroy
    @product = current_user.products.find(params[:id]) #current user deletes own
    @product.destroy

    respond_to do |format|
      format.html { redirect_to(products_url) }
      format.xml  { head :ok }
    end
  end

我正在使用Rails Jquery UJS和rails-jquery并在我的应用布局中使用csrf_meta_tag。我注意到的是,当我点击销毁链接时,它弹出窗口并说“你确定”,我点击确定按钮,由于一些奇怪的原因它闪烁TWICE,它从来没有这样做,直到我安装Jquery。我该如何解决这个问题?

编辑 - 答案:

重新安装rails jquery-ujs> https://github.com/rails/jquery-ujs

您必须保留jquery.min.jsjquery.js这两个文件。我删除了jquery.min.js,因为我认为它是一个最小化版本但显然不是,这里是来自jquery-ujs的所有文件:

   jquery.js
   jquery.min.js
   jquery_ujs.js
   rails.js # i had to install this manually from the link (or zip file)
   jquery-ui # i wanted the user interface too

2 个答案:

答案 0 :(得分:1)

错误消息显示您正在尝试在product操作中找到id show 4的nil。那里有两个问题。首先,除非您的产品ID真的是4,否则您可能会从params[:id]获得show。另一个问题是,您处于delete行动,而不是DELETE行动。这意味着您的路由错误或者http动词正在从GET更改为DELETE

闪烁两次可能是一个相关的症状,但有些你没有发送params并且{{1}}哈希没有被传递。

答案 1 :(得分:1)

确保rails.js中有javascripts个文件?当您从原型移动到jquery时,标准的restful DELETE不再正常工作。 rails.js修复了所以它再次正常工作。你可以在这里参考Josh Huckabee的文章:http://joshhuckabee.com/jquery-rails-3。希望这会有所帮助。

PS:还要确保在布局中包含rails.js。像这样:

<%= javascript_include_tag 'jquery-1.4.4.min', 'jquery-ui-1.8.7.custom.min', 'rails', 'application' %>