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

时间:2018-04-25 07:42:50

标签: ruby-on-rails exception rescue raise

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

但是当我使用特定的异常名称进行救援时,它会为名为。

的异常提供一个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 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

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

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