0

我使用单表继承 (STI) 创建了一些模型,这些模型从一个共同的父类继承而来。一个单独的模型与超类有关联。例如:如下...

class Fruit < ActiveRecord::Base
  has_many :smoothies
end

class Apple < Fruit
end

class Banana < Fruit
end

class Smoothie < ActiveRecord::Base
  belongs_to :fruit
end

有没有办法在不为每个子类手动创建方法的情况下查询某个子类?

my_smoothie.apple如果Apple与_ my_smoothie_Apple

更新

我的用例实际上是我有一个冰沙的关系,我想做some_smoothies.apples一个包含任何相关苹果的关系。

4

2 回答 2

0

如果您执行 my_smoothie.fruit,您应该返回一个 Apple 对象(不是 Fruit 对象,Rails 魔法)。你可能会很好。

于 2013-01-09T22:02:01.220 回答
0

你能做到吗?

my_smoothie.fruit.where(type: "Apple")

当然,如果您需要动态推断子类的名称,您可以使用

subclass_object.class.to_s # if you have an instantiated object e.g. of 'apple'
subclass.to_s # if you start form the subclass e.g. of Apple

如果这对您来说没问题,请考虑为其创建命名范围

于 2013-08-02T11:44:20.747 回答