ruby - 处理复合记录的 Rails 模型

标签 ruby ruby-on-rails-3 inheritance database-normalization

数据库规范化的第一种形式是将可能为空的字段保存在第二个表中,并在引用它们时加入它们。 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/

相关文章:

ruby - 有没有{|x| x } ruby 的速记?

ruby-on-rails - 访问存储在使用 #create_join_table 创建的连接表中的连接模型属性

ruby - redis中的嵌套哈希

ruby-on-rails - 提交表单时忽略字段

c++ - 多拷贝构造函数继承中的惊人行为

Ruby 如何构造动态正则表达式?

ruby-on-rails - 通过 gem 与 A​​pache 级别的 Rails SSL 重定向

ruby-on-rails - Rails accepts_nested_attributes计数验证

ios - Swift:UIViewController常用函数继承

python - Odoo扩展与继承