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”(您正在被重定向)页面。非常棒的回答,谢谢,这对我帮助很大。