第一种形式的数据库规范化是在第二个表中保存可能为空的字段,并在引用它们时将它们连接起来。 SQL看起来像这样。
SELECT A.*, DA.* FROM ANIMALS A
INNER JOIN DOG_ATTRIBUTES DA ON DA.ANIMAL_ID = A.ID
这对于大型数据库来说非常常见,因此只有狗会拥有特定于狗的属性。现在我知道这可以实现为has_one关系,例如
class Dog < Animal
has_one :dog_attribute
end
如果它是一个只读模型,我可以将上面的SQL作为一个视图实现,只需参考我的Dog模型中的DOGS视图。
有没有办法可以将复合Dog对象(来自ANIMALS表和DOG_ATTRIBUTES表的属性)作为单个模型处理,将两者的属性放入表单中,将它们保存为一个命令并检索两者的属性?
答案 0 :(得分:1)
您正在寻找多表继承(MTI)。默认情况下,Rails仅支持单表继承,但您可以为此功能安装ActiveRecord::ActsAs。
模拟ActiveRecord模型的多表继承(MTI)。通过 默认情况下,ActiveRecord仅支持单表继承(STI)。 MTI为您提供STI的好处,但无需放置数十个 将空字段放入单个表格中。