Rails控制器跳过after_action

时间:2017-11-27 09:03:33

标签: ruby-on-rails ruby

我们说我有一个控制器如下:

<endpoints xmlns="http://java.sun.com/xml/ns/jax-ws/ri/runtime"
       version="2.0">
    <endpoint name="SampleService"
          implementation="com.ws.ServiceImpl"
          url-pattern="/service" />
</endpoints>

是否有一种干净的方法可以阻止所有 class ExampleController < ApplicationController after_action -> { puts 'Call me only on success' } def create obj = Obj.create(obj_params) if obj.errors.empty? render json: obj else render json: { errors: obj.errors }, status: 422 end end end 执行? 我所知道的事情:

  1. 设置某种实例变量,并在每个after_action
  2. 中进行检查
  3. after_action不会停止render :something and return s
  4. 引发错误(例如after_action)会有效,但是当我不想返回错误细节但仍然回复create!
  5. 时,我会使用它

    我会选择422

    之类的东西

1 个答案:

答案 0 :(得分:2)

您可以询问回复是否成功:

after_action :call_me_on_success, if: -> { response.successful? }

这适用于所有2XX代码:

response.method(:successful?).source
=> "def successful; status >= 200 && status < 300; end"