0

我有一个after_initialize回调,我希望在模型被直接创建或实例化时发生,而不是通过其他地方的关联加载。像这样的东西:

after_initialize :check_status, if: "instantiated_directly?"

这样MyModel.find(1)会触发检查,但other_model.my_model不会。

status 是一个长进程的状态变量,只需要在某个长时间运行的进程启动之前进行验证。如果该过程似乎正在进行中,我想阻止用户加载模型。由于其他各种其他原因,我希望仍然能够访问该模型中的属性。

4

1 回答 1

0

防止读取可能不是改善此问题的最佳载体,也不是试图超出其自身范围来确定如何加载明智想法的模型。相反,我建议您简单地添加一个验证,以确保可以在不干扰您的后台进程的情况下修改记录,例如...</p>

validate :safe_to_edit?

def safe_to_edit?
  some_state_variable
end

您的模型还在这里公开了一个safe_to_edit?方法,该方法允许您的控制器或其他对象独立于检查验证来确定最佳行为,例如,如果您有客户端服务轮询以标记用户何时可以安全编辑,或者您想要延迟响应并在几秒钟后在后台作业中重试,等等。

于 2013-05-27T00:07:41.467 回答