Ruby on rails Rails STI同级回调正在传播
我在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
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