Ruby on rails Rails STI同级回调正在传播

Ruby on rails Rails STI同级回调正在传播,ruby-on-rails,ruby,inheritance,ruby-on-rails-5,sti,Ruby On Rails,Ruby,Inheritance,Ruby On Rails 5,Sti,我在STI(单表继承)中遇到了一个问题,回调应该只在子模型的一个实例上运行,实际上也在其兄弟实例上运行,尽管它不应该运行 class Parent < ApplicationRecord; end class FirstChild < Parent after_initialize :set_default_attr private def set_default_attr self.attr = "something" end end class Se

我在STI(单表继承)中遇到了一个问题,回调应该只在子模型的一个实例上运行,实际上也在其兄弟实例上运行,尽管它不应该运行

class Parent < ApplicationRecord; end

class FirstChild < Parent
  after_initialize :set_default_attr

  private
  def set_default_attr
    self.attr = "something"
  end
end

class SecondChild < Parent; end

second = SecondChild.new
assert_nil second.attr # Fails because it is set to "something"

然而,这让我感觉非常肮脏。

我的错,我继承了一个错误的类

class FirstChild < Parent
  after_initialize :set_default_attr, if: :type_is_first?
  validate :attr, presence: true, if: :type_is_first?

  private
  def set_default_attr
    self.attr = "something"
  end

  def type_is_first?
    type == "FirstChild"
  end
end