在Rails中删除记录时找不到记录错误

时间:2016-01-13 07:06:33

标签: ruby-on-rails ruby ruby-on-rails-4

我正在尝试通过传递该记录的ID来删除记录。代码如下所示:

def destroy_catalogue_entry
    @catalogue_entry = CatalogueEntry.find(params[:catalogue_entry_id])
    if @catalogue_entry.destroy
      flash[:success] = 'Catalogue entry deleted successfully.'
    else
      flash[:error] = 'Failed...'
    end
  end

我收到了一个有趣的错误。当我的函数destroy_catalogue_entry被调用时,它会显示:

Couldn't find CatalogueEntry with 'id'=16

但是当我评论条件部分并将@catalogue_entry渲染为json时,输出将成功打印。那怎么可能呢?我犯了一些愚蠢的错误,还是有逻辑上的原因。请赐教。

3 个答案:

答案 0 :(得分:2)

解决!我所做的就是:

 def destroy_catalogue_entry
    @catalogue_entry = CatalogueEntry.find(params[:catalogue_entry_id])
    if @catalogue_entry.destroy
      flash[:success] = 'Catalogue entry deleted Successfully'
      redirect_to action: :view_catalogue_entries, dc_id: @catalogue_entry.dc_id
    else
      flash[:success] = 'Failed...'
    end
  end

当我注意到控制台时,记录被成功删除但在此之后对同一记录进行了SELECT查询,这就是为什么抛出错误无法找到CatalogueEntry使用' id' = 16 。当我重定向它时,问题就解决了。

答案 1 :(得分:0)

我认为destroy方法正在返回一个对象。在ruby中,除if或null之外的任何内容都将在if语句中变为true。你可以使用destroy方法并查看它返回的内容。

答案 2 :(得分:0)

我认为你的,

@catalogue_entry = CatalogueEntry.find(params[:catalogue_entry_id])

返回该错误,因为它无法找到id为6的CatalogueEntry,请确保您的CatalogueEntry具有该ID。