通过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_smoothie
与Apple
相关联,我希望能够按照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中关联模型的子类查询的主要内容,如果未能解决你的问题,请参考以下文章