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
使用此方法。
我有一个使用单一 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
使用此方法。