代码之家  ›  专栏  ›  技术社区  ›  ashusvirus

解救自定义异常时会出现名称错误?

  •  0
  • ashusvirus  · 技术社区  · 7 年前

    我试图在rails中的一个服务中引发我的异常。

    但是,当我使用特定的异常名称进行救援时,它为调用的异常提供了一个nameError。

    status": 500,
    "error": "Internal Server Error",
    "exception": "#<NameError: uninitialized constant Api::V1::UsersController::CustomExceptions>",
    "traces": {
    

    例外文件:

    module CustomExceptions
      class EmptyObject < StandardError; end
      class WrongParams < StandardError; end
      class Unauthorized < StandardError; end
    end
    

    引发异常:

    class UsersService
    class << self
        include AuthenticationHelper
        def find_users(current_user, query_params)          
            users = User.where(some query)
            if users.count > 0
                users
            else
                raise CustomExceptions::EmptyObject, "empty user object returned"
            end
        end
    end
    end
    

    控制器中的救援:

     rescue CustomExceptions::EmptyObject => error
      render json: {error: 'No users found'}, status: 404
    end
    
    2 回复  |  直到 7 年前
        1
  •  1
  •   fongfan999    7 年前

    因为你定义了 CustomExceptions ,所以Rails希望您在文件中定义该类 custom_exceptions.rb

    为了打电话 自定义例外 ,则应重命名文件名。

        2
  •  1
  •   idlefingers    7 年前

    看起来您的名称空间有点混乱。一种确保使用顶级名称空间并阻止其查看的方法 UserService 您的例外情况是使用 :: 要明确表示要使用顶层,请执行以下操作:

    raise ::CustomExceptions::EmptyObject, "empty user object returned"