获救时的自定义异常会给出名称错误?

custom exceptions when rescued gives a name error?

我正在尝试在 rails 的服务中引发 myExceptions。

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

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

看起来你的命名空间有点混乱。确保您正在使用顶级命名空间并阻止它在 UserService 中查找您的异常的一种方法是使用 :: 明确表示您想要使用顶级:

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

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

中定义 class

为了调用CustomExceptions,您应该重命名文件名。