使用外键(ID)的Rails单表继承

时间:2010-09-12 18:50:32

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

我必须对关联结构进行建模,并将关联划分为divisions / subdivisions / sections等。所以我创建了一个简单的实体 - 属性模型:

alt text

我想使用rails的单表继承,但似乎仅当type列是字符串时才有效。我的问题是如何用我的方法实现这一目标?由于我使用外键作为“类型”,我必须首先查询“类型名称”。有没有人这样做过?

1 个答案:

答案 0 :(得分:1)

我建议在结构表中添加String“type”属性以满足单表继承,并添加before_save回调以在任一表上设置正确的值。

假设您有一个名为“Basic”的StructureType。在Rails中,这意味着您需要具有类层次结构:

结构<的ActiveRecord :: Base的 BasicStructure<结构

在Structure类中添加:

before_create :set_structure_type_fk

def set_structure_type_fk
  self.structure_type = StructureType.find_by_name(\ 
      self.class.name.gsub(/Structure/, '').downcase)
end

希望这有帮助。

请注意,此方法意味着StructureType.name应该是不可变的:一旦创建,它就永远不会被更改,除非相应地更新两个表的数据库迁移。

ķ