我如何从服务类或模型类中调用渲染?
Posted
技术标签:
【中文标题】我如何从服务类或模型类中调用渲染?【英文标题】:How can i call render from inside a Service class or model Class? 【发布时间】:2018-04-20 07:47:48 【问题描述】:我的服务根据用户的角色对一些数据进行身份验证。如果查询参数错误,我想退出代码并呈现一些错误消息作为 api 响应?
render json: 'something' and return
我得到它的错误:
"status": 500,
"error": "Internal Server Error",
"exception": "#<NoMethodError: undefined method `render' for AuthenticationService:Class>",
"traces":
"Application Trace": [
【问题讨论】:
【参考方案1】:简短的回答是:你不能。
对于诸如身份验证或权限检查之类的事情,更常见的是要求您的服务进行身份验证,然后该服务将返回一个您可以做出反应的值或抛出一个您可以做出反应的异常。
这样,您的代码的每个部分都可以对其需要负责的部分负责,而不再赘述。您的服务可以进行身份验证,并且您的控制器可以调用渲染。
因此,例如,您的服务中可能会出现这样的情况:
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
方法来演示)
【讨论】:
如果我在救援后写 AuthenticationError,它会给我一个未定义的常量错误? 是的,那是因为我只是将那个错误类作为示例。您可以定义自己的错误类,例如:***.com/questions/5200842/…以上是关于我如何从服务类或模型类中调用渲染?的主要内容,如果未能解决你的问题,请参考以下文章
Spring MVC普通类或工具类中调用service报空空指针的解决办法(调用service报java.lang.NullPointerException)
我应该何时从正在观察持久模型类的关闭 ViewController 类中调用 removeObserver:forKeyPath?