Rails中after_commit回调的顺序。

问题描述 投票:0回答:1

型号 Item 拥有 after_commit 回调说 updated_related

class Item < ActiveRecord::Base
    after_commit :updated_related        
    def updated_related
      # update related items based on latest item
    end
end

还有,一个叫 ItemObserverafter_commit 所谓 clear_item_cache

class ItemObserver < ActiveRecord::Observer
    def after_commit
      #clear item from cache
    end
end

现在的问题是 update_related 被先调用,然后再调用观察者,因此相关的项目被调用在陈旧的 item 条目的一部分,如何确保观察者的回调先被调用。

我如何确保观察者的回调首先被调用,因为它属于 item 之后,我想运行相关的项目来运行?

P.S.从观察者回调中删除代码或完全删除回调现在不是一个选项.我在rails 4上使用的是 rails-observable 创业板的Observable.Model Item有一个叫做update_related的回调,class Item < ActiveRecord::Base after_commit :update_related #更新相关的项目.

ruby-on-rails ruby ruby-on-rails-4 callback
1个回答
0
投票

你可以不使观察者的回调先被调用,而从 文档:

观察者的回调 将总是在模型中定义的回调之后被调用。 本身。

你应该把所有逻辑的 updated_related 融入 after_commit 的观察者,那么你可以控制任何你想要的顺序。

或者你可以在 updated_relatedafter_commit

© www.soinside.com 2019 - 2024. All rights reserved.