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