我有一个带有以下回调注册的模型:
after_save :set_initial_counts, on: :create
guide似乎表示set_initial_counts方法将在创建链中保存后调用,但在更新期间保存时则不会。但是,我发现在每次保存后调用它。如何才能在创建期间调用它? (我考虑过创建新模型的可能性,因为某些原因我没有打算这样做,所以我尝试将一个测试方法注册到after_create。正如你所料,这不会被调用。)< / p>
更新以回答几个问题: 首先,这是set_initial_counts的文本:
def set_initial_counts
[tags, sources, characters].each do |coll|
coll.each do |obj|
obj.increment!(:stories_count)
end
end
end
这样做的目的是管理计数器缓存。故事对象has_and_belongs_to_many标签,来源和字符。其中每个都有一个stories_count列,用于存储与其关联的故事数量。
第二:有人想知道我为什么不使用after_create而不是after_save。在实践中,我可能会使用after_create,但我想知道为什么它不起作用,因为它不起作用这意味着我对回调的理解是有缺陷的,这可能会导致我将来会犯更多错误。
第三:我知道在更新期间触发了after_save。但是,Section 2.1中的第三个代码块表示我可以使用on::create来确保只在创建期间调用set_initial_counts。