act_as_nested_set模型的after_save回调导致SystemStackError

时间:2018-11-11 11:50:59

标签: ruby-on-rails ruby callback ruby-on-rails-5.1 nested-sets

我正在使用Rails 5.1.6

我有一个使用Taxon的模型acts_as_nested_set。我有4个级别的分类单元,最后一个级别sub_category具有保存所有父母姓名的属性,我想在每次更改其任何父母姓名时都使用{{1 }}回调会在sub_category中运行,因为每个子进程都在运行保存回调后会导致无限循环。知道如何克服这个问题吗?

after_save

1 个答案:

答案 0 :(得分:0)

我有一个适合您的解决方案,但我认为这不是一个优雅的解决方案,但是您可以在这里进行调整:

在您的模型中:

class Taxon < ActiveRecord::Base
  cattr_accessor :skip_callbacks
  after_save :update_tree_name, :unless => :skip_callbacks
end

def update_tree_name
  if shop_sub_category?
    update(display_tree_name: beautiful_name)
  else 
    related_sub_categories = tree_list.select{ |taxon| taxon.kind == "sub_category" }
    Taxon.skip_callbacks = true # disable the after_save callback so that you do not end up in infinite loop (stackoverflow)
    related_sub_categories.each do |t|
      t.update(display_tree_name: t.beautiful_name)
    end
    Taxon.skip_callbacks = false # enable callbacks again when you finish
  end
end