错误事件触发的Rails模型回调

时间:2017-10-25 16:56:38

标签: ruby-on-rails ruby callback

我有一个带有以下回调注册的模型:

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。

1 个答案:

答案 0 :(得分:0)

请参阅this

答案基本上是on不是after_save的选项,如果你想使用on create选项,你只需使用after_create。