处理复合记录的Rails模型



数据库规范化的第一种形式是在第二个表中保存可能为空的字段,并在引用它们时将它们连接起来。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表的属性)视为单个模型,将两者的属性放入表单中,将它们保存为一个命令并检索两者的属性?

您正在寻找多表继承(MTI)。Rails默认只支持单表继承,但是你可以安装ActiveRecord::ActsAs来实现这个功能。

为ActiveRecord模型模拟多表继承(MTI)。通过默认情况下,ActiveRecord只支持单表继承(STI)。MTI为您提供STI的好处,但无需放置数十个'

最新更新