Rails activerecord组合键ID和类型

时间:2010-08-01 03:51:23

标签: ruby-on-rails activerecord polymorphism

假设我有一个包含parent_id列的表动物 还要说我在表格上有一个type_id来表示物种

所以在我的Animal类中,Animall.all将返回所有动物。

说现在我在animal_types表中添加了两种新的动物类型,狗和猫。所以现在有些动物的type_id为1,有些为2。

我可以在Animal上写一个named_scope来归还所有的猫或所有的狗。

但是,如果我想创建引用动物表的猫狗类的路线,那么在dog类中,dog.all应该发出查询,从动物中选择*,其中type_id = 1

然后说我创建了一个名为person的类,并添加了一个has_many:dogs关系

我该如何做到这一点?

1 个答案:

答案 0 :(得分:1)

rails中执行此操作的方式是STI(单表继承)。简短的回答是你向表中添加一个类型字段,然后将动物子类化。

请参阅http://api.rubyonrails.org/classes/ActiveRecord/Base.html

所以在你的情况下,你会有。

class Animal < ActiveRecord::Base; end
class Dog < Animal; end
class Cat < Animal; end