我试图让我的胖子User模型不那么笨重.我正在使用值对象来表示它们的自定义值和操作,并且我坚持使用ActiveSupport::Concerns和模块.我读这是一个灵感.
我把这样的帮助方法:
def is_a_wizard?
power_level >= WIZARD_POWER
end
def just_became_a_wizard?
power_level == WIZARD_POWER
end
Run Code Online (Sandbox Code Playgroud)
进入模块,并将它们作为一种扩展包含在内.但是,它很难阅读和维护,我在视图和控制器中都需要它们中的一些(例如用于向导身份验证).我应该把它们放在哪里?在使用它们时创建服务对象?
假设我有一个控制器,如下所示:
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
Run Code Online (Sandbox Code Playgroud)
有没有一种干净的方法来阻止所有 after_actions 的执行?我知道的事情:
after_actionrender :something and return不停止after_action小号create!)会起作用,但是当我不想返回错误细节并仍然使用它进行响应时,我会使用它422我会满足于类似的东西 render :foo and do_not_call_afters