获救时的自定义异常会给出名称错误?
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
,您应该重命名文件名。
我正在尝试在 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
.
为了调用CustomExceptions
,您应该重命名文件名。