我想知道在轨道上的红宝石中处理这种情况的最佳方法是什么。
users_controller.rb
def show
@user = User.find params[:id]
end
如果找不到用户,它会抛出一个异常,这个异常不会被捕获到任何地方,因此它会向最终用户显示一些丑陋的东西。
解决方案将打包到开始...救援...结束块:
def show
begin
@user = User.find params[:id]
rescue
flash[:error] = "User not found"
redirect :action => :index
end
end
虽然我从未见过任何我见过的铁杆文章或教程中的代码。
处理此类情况的正确方法是什么?
答案 0 :(得分:3)
请参阅文档rescue_from
答案 1 :(得分:2)
这取决于您的要求。
但是你需要一个通用的解决方案,然后你可以在ApplicaionController
中设置一个救援块来处理RecordNotFound
例外。
答案 2 :(得分:1)
你可以做到
def show
@user = User.find_by_id(params[:id])
unless @user
flash[:error] = "User not found"
redirect :action => :index
end
end
但是你不能指望你会在应用程序中调用一个id不在db中的链接。请参阅question
的答案答案 3 :(得分:1)
开发环境会向您显示丑陋的错误消息,但生产环境只会在ID无效时发出HTTP 404错误(找不到页面)。
答案 4 :(得分:0)
我认为你可以解决这个问题
@user = User.find(params[:id] = current_user)