数据库规范化的第一种形式是将可能为空的字段保存在第二个表中,并在引用它们时加入它们。 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 实现为一个 View ,并且只引用我的 Dog 模型中的 DOGS View 。
有没有一种方法可以将复合 Dog 对象(具有来自 ANIMALS 表和 DOG_ATTRIBUTES 表的属性)视为单个模型,将两者的属性放入表单中,将它们保存为一个命令并检索两者的属性?
最佳答案
您正在寻找多表继承 (MTI)。 Rails默认只支持单表继承,不过你可以安装ActiveRecord::ActsAs对于此功能。
Simulates multiple-table-inheritance (MTI) for ActiveRecord models. By default, ActiveRecord only supports single-table inheritance (STI). MTI gives you the benefits of STI but without having to place dozens of empty fields into a single table.`
关于ruby - 处理复合记录的 Rails 模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33238418/