【发布时间】:2017-11-28 06:34:17
【问题描述】:
假设我有一个控制器如下:
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
有没有一种干净的方法来阻止 all after_actions 执行?
我知道的事情:
- 设置某种实例变量并在每个
after_action中检查它 -
render :something and return不会停止after_actions - 引发错误(如
create!)会起作用,但当我不想返回错误细节并仍以422响应时,我会使用它
我会接受render :foo and do_not_call_afters之类的东西
【问题讨论】:
-
只需将代码放在
obj.errors.empty?之后和render json: obj之前。为什么要输入after_action? -
after_action方法用于多个动作和控制器,并且可以有很多。我已经更新了问题以反映这一点。 -
然后您可以创建一个私有方法并为每个操作调用黑色成功代码。你到底想达到什么目的?
-
不同的控制器定义了不同的
after_actions,我正在寻找一种方法来停止所有这些。诸如“立即渲染,不关心之后发生什么”之类的东西
标签: ruby-on-rails ruby