2010-04-12 76 views
1

我有 - 我的想法 - 是一个简单的问题。这里是我的代码:如何返回子对象?

class Fruit < ActiveRecord::Base 
end 

class Apple < Fruit 
end 

class Kiwi < Fruit 
end 

假设我正确拥有所有的STI设置,并有多种类型的表中的苹果和猕猴桃的记录。从这里...

fruits = Fruit.find(:all) 

...我如何返回水果数组中的苹果数组?

回答

2

你会怎么做,如果他们只是普通的对象,用同样的方法:

fruits.select {|fruit| fruit.is_a?(Apple) } 

STI使用type领域保持子模型的轨道,所以你也可以做

fruits.select {|fruit| fruit.type == "Apple" } 

如果你只想从数据库中得到苹果,只要做

Apple.find(:all)