通过rails中关联模型的子类查询

Posted

技术标签:

【中文标题】通过rails中关联模型的子类查询【英文标题】:Query by an associated model's subclass in rails 【发布时间】:2013-01-09 20:14:32 【问题描述】:

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

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_smoothieApple 相关联,我希望能够按照my_smoothie.apple 的方式获得Apple 实例

更新

我的用例实际上是我有一个 Smoothies 的关系,我想做some_smoothies.apples 来获得一个包含任何关联 Apples 的关系。

【问题讨论】:

【参考方案1】:

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

【讨论】:

谢谢@Swards - 这并不能完全解决我的问题。我已经更新了这个问题,以更好地反映我想要实现的目标。【参考方案2】:

你能做到吗?

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

如果这对你来说没问题,请考虑为它创建named scopes

【讨论】:

railscasts.com/episodes/…

以上是关于通过rails中关联模型的子类查询的主要内容,如果未能解决你的问题,请参考以下文章

获取Rails模型中关联列的总和

如何对rails中关联记录的jquery数据表列进行排序

了解 Rails 控制器 - 通过关联模型的实例变量查看连接

laravel中关联模型查询选择性的字段

Mongoose中关联查询populate的使用

yii2中关联查询