如何返回儿童物品?

时间:2010-04-12 21:55:49

标签: ruby-on-rails ruby inheritance single-table-inheritance

我有 - 我的想法 - 是一个简单的问题。这是我的代码:

class Fruit < ActiveRecord::Base
end

class Apple < Fruit
end

class Kiwi < Fruit
end

假设我正确设置了所有STI,并且表中有多种类型的Apple和Kiwi记录。从这里......

fruits = Fruit.find(:all)

...如何从fruits数组返回一个Apples数组?

1 个答案:

答案 0 :(得分:2)

如果它们只是普通的物体,你就会这样做:

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

STI使用type字段来跟踪子模型,因此您也可以

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

如果您只想从数据库中获取苹果,请执行

Apple.find(:all)