我有一个after_initialize
回调,我希望在模型直接创建或实例化时发生,而不是通过在其他地方的关联加载。像这样:
after_initialize :check_status, if: "instantiated_directly?"
使MyModel.find(1)
触发检查,但other_model.my_model
不会。
状态是长流程的状态变量,它只需要在某个长时间运行的流程启动之前进行验证。如果进程似乎正在进行中,我想防止用户加载模型。由于其他原因,我希望仍然能够访问该模型中的属性
阻止读取可能不是改善此问题的最佳向量,试图超出其自身范围以确定如何加载明智想法的模型也不是。相反,我建议您只需添加一个验证,以确保可以在不干扰后台进程的情况下修改记录,就像……
validate :safe_to_edit?
def safe_to_edit?
some_state_variable
end
您的模型还在这里公开了一个safe_to_edit?
方法,该方法允许您的控制器或其他对象独立于检查验证来确定最佳行为,例如,如果您有一个客户端服务轮询来标记用户何时可以安全编辑,或者您想延迟响应并在后台作业中重试几秒钟,等等。