如何通过Rails中的关联来区分直接实例化和实例化?

时间:2013-05-26 23:59:32

标签: ruby-on-rails ruby-on-rails-3 callback

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

after_initialize :check_status, if: "instantiated_directly?"

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

状态是长进程的状态变量,只需要在某个长时间运行的进程启动之前进行验证。如果进程似乎正在进行中,我想阻止用户加载模型。我还想在其他地方出于各种其他原因访问该模型中的属性。

1 个答案:

答案 0 :(得分:0)

防止阅读可能不是改善这个问题的最佳载体,也不是试图超出自己范围来确定如何加载明智想法的模型。我建议您只需添加一个验证,以确保可以修改记录而不会干扰您的后台进程,...

validate :safe_to_edit?

def safe_to_edit?
  some_state_variable
end

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