我如何从服务 class 或模型 Class 中调用渲染?
How can i call render from inside a Service class or model Class?
我的服务根据用户的角色验证一些数据。如果查询参数错误,我想退出代码并呈现一些错误消息作为 api 响应?
render json: 'something' and return
我得到它的错误:
"status": 500,
"error": "Internal Server Error",
"exception": "#<NoMethodError: undefined method `render' for AuthenticationService:Class>",
"traces": {
"Application Trace": [
简短的回答是:你不能。
对于身份验证或权限检查之类的事情,更常见的是要求您的服务进行身份验证,然后该服务将 return 一个您可以做出反应的值或抛出一个您可以做出反应的异常.
这样一来,您的代码的每个部分都可以只负责其需要的内容。您的服务可以进行身份验证,您的控制器可以调用渲染。
因此,例如,您可能会在您的服务中得到这样的结果:
def authenticate!
if !okay
raise AuthenticationError
end
end
在你的控制器中:
def my_action
begin
AuthenticationService.new.authenticate!
rescue AuthenticationError
render json: 'something' and return
end
end
(这是一个非常基本的示例 - 我编了一个错误 class 和一个 okay
方法来演示)
我的服务根据用户的角色验证一些数据。如果查询参数错误,我想退出代码并呈现一些错误消息作为 api 响应?
render json: 'something' and return
我得到它的错误:
"status": 500,
"error": "Internal Server Error",
"exception": "#<NoMethodError: undefined method `render' for AuthenticationService:Class>",
"traces": {
"Application Trace": [
简短的回答是:你不能。
对于身份验证或权限检查之类的事情,更常见的是要求您的服务进行身份验证,然后该服务将 return 一个您可以做出反应的值或抛出一个您可以做出反应的异常.
这样一来,您的代码的每个部分都可以只负责其需要的内容。您的服务可以进行身份验证,您的控制器可以调用渲染。
因此,例如,您可能会在您的服务中得到这样的结果:
def authenticate!
if !okay
raise AuthenticationError
end
end
在你的控制器中:
def my_action
begin
AuthenticationService.new.authenticate!
rescue AuthenticationError
render json: 'something' and return
end
end
(这是一个非常基本的示例 - 我编了一个错误 class 和一个 okay
方法来演示)