我如何从服务 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 方法来演示)