如何使用回调设计相互依赖的模型

时间:2014-06-30 12:51:30

标签: ruby-on-rails activerecord model callback rails-activerecord

所以我有2个模型AB

保存或销毁A时,B需要根据A发生的情况进行更新。

保存或销毁B时,A需要根据B发生的情况进行更新。

我不能只进行2次回调,这会导致模型递归回调。当模型A因触发B回调而被保存时,我不需要触发回调,反之亦然。

执行此操作的轨道方式是什么?

2 个答案:

答案 0 :(得分:1)

您可以在回调中使用update_columns

e.g:

模型A已保存。在回调中,你有这样的东西:

recordB.update_columns(:name => '')

update_column不会运行任何回调。 注意:它也不会运行验证,也不会更新updated_at字段。

答案 1 :(得分:1)

我有类似的情况,你能做的最好的事情是在你的回调中使用一个标志

class A
  attr_accessor :is_updated_by_callback
  after_commit :update_b

  def update_b
    return if is_updated_by_callback
    b.is_updated_by_callback = true
    b.update
  end 
end

反之亦然