ActiveRecord 单 table 继承 - 如何获得根模型?

ActiveRecord single table inheritance - how to get root model?

我有一个使用单一 table 继承的模型和一个应该适用于任何模型的问题。

考虑这个例子:

class Car
  acts_as_categorizable
end

class Suv < Car; end

module Categorizable
  def after_safe
    siblings = this.class.where(category: self.category)
    #... do something with the siblings
  end
end

现在,如果我有一个 Suv 并操纵它的类别,兄弟姐妹行将只会找到该类别中的其他 Suv 汽车,但我需要找到该类别中的所有汽车。

我不想对此进行硬编码,因此给定一个 Suv class,我需要找到它的根模型 (Car)。

这应该可以解决问题:

module Categorizable
  def after_save
    # Get the base class. Please note, this will work on 1 level deep STI
    klass = self.type.blank? ? self.class : self.class.superclass

    siblings = klass.where(category: self.category)

    # ...
  end
end

其实已经有方法了; base_class。所以 Suv.base_class 应该 return Car,并且 Suv 的任何子类也将 return Car 使用此方法。