Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 在Ruby on Rails中处理ActiveRecord::RecordNotFound_Ruby On Rails_Ruby On Rails 3_Activerecord_Find - Fatal编程技术网

Ruby on rails 在Ruby on Rails中处理ActiveRecord::RecordNotFound

Ruby on rails 在Ruby on Rails中处理ActiveRecord::RecordNotFound,ruby-on-rails,ruby-on-rails-3,activerecord,find,Ruby On Rails,Ruby On Rails 3,Activerecord,Find,在我的编辑操作中,我有 @item = current_user.shop.items.find(params[:id]) 因此,用户只能编辑属于其店铺的商品。如果他们试图编辑一个不属于他们商店的项目,那么他们会得到一个ActiveRecord::RecordNotFound错误 在这种情况下,处理此错误的最佳方法是什么?我应该提出一个例外吗?我是否应该重定向到某个地方并设置闪光灯(如果是,我该怎么做),我是否应该让它保持原样?任何建议都将不胜感激 谢谢向控制器添加如下内容: rescue_f

在我的编辑操作中,我有

@item = current_user.shop.items.find(params[:id])
因此,用户只能编辑属于其店铺的商品。如果他们试图编辑一个不属于他们商店的项目,那么他们会得到一个ActiveRecord::RecordNotFound错误

在这种情况下,处理此错误的最佳方法是什么?我应该提出一个例外吗?我是否应该重定向到某个地方并设置闪光灯(如果是,我该怎么做),我是否应该让它保持原样?任何建议都将不胜感激


谢谢向控制器添加如下内容:

rescue_from ActiveRecord::RecordNotFound do
  flash[:notice] = 'The object you tried to access does not exist'
  render :not_found   # or e.g. redirect_to :action => :index
end

+1用于@Koraktor的解决方案。如果要避免ActiveRecord::RecordNotFound,可以使用find_by方法而不是find

@item = current_user.shop.items.find_by_id(params[:id])
if @item.nil?
  flash[:error] = "Item not found"
else
  # Process the @item...
end

此外,在呈现模板时还应设置http状态:

rescue_from ActiveRecord::RecordNotFound do
  render :not_found, :status => :not_found
end
检查状态列表(第2.2.13.4节)


如其他地方所述(例如),在发送40x状态时,您不应进行重定向,只有30x状态才允许重定向。因此,当您尝试使用:not_found状态进行重定向时,可能会遇到一个奇怪的“you are redirected”(您正在被重定向)页面。

非常棒的回答,谢谢,这对我帮助很大。