如何从Service类或模型类中调用render?

时间:2018-04-20 07:47:49

标签: ruby-on-rails rails-api actioncontroller

我的服务根据用户的角色验证一些数据。如果查询参数错误,我想退出代码并呈现一些错误消息作为api响应?

render json: 'something' and return

我得到错误:

 "status": 500,
"error": "Internal Server Error",
"exception": "#<NoMethodError: undefined method `render' for AuthenticationService:Class>",
"traces": {
    "Application Trace": [

1 个答案:

答案 0 :(得分:2)

简短的回答是:你不能。

对于身份验证或权限检查之类的内容,要求您的服务进行身份验证更为常见,然后该服务将返回您可以做出反应的值,或者抛出您可以做出反应的异常。

这样,代码的每个部分都可以对其需要的内容负责,而不再需要。您的服务可以进行身份​​验证,您的控制器可以调用渲染。

因此,例如,您可能会在服务中得到类似的内容:

def authenticate!
  if !okay
    raise AuthenticationError
  end
end

在你的控制器中:

def my_action
  begin
    AuthenticationService.new.authenticate!
  rescue AuthenticationError
    render json: 'something' and return
  end
end

(这是一个非常基本的例子 - 我已经编写了一个错误类和一个okay方法来演示)