我为什么要使用一对一(has_one)关联?

时间:2013-01-24 23:49:40

标签: ruby-on-rails ruby relational-database rails-activerecord

当我可以嵌入关联对象并使用has_one和/或composed_of时,为什么我应该使用serialize关联(以及其他表格,模型)。在我总是加入关联对象而不需要复杂查询的情况下。例如:

狗(颜色,重量)has_one :head头部(teeth_count,eye_color)

我可以用Dog替换(颜色,重量,head_teeth_count,head_eye_color)并使用“计算属性”或值对象,如

composed_of :head, mapping: [%w(head_teeth_count teeth_count), %w(head_eye_color eye_color)]

表格更少,更简单,代码更清晰,模型更少,不会出现意外的额外查询,性能更佳。

另一个例子:

用户(电子邮件)has_many :roles角色(姓名)

转换为用户(电子邮件,角色)

serialize :roles, Array

我在这些案件中遗漏了什么?

1 个答案:

答案 0 :(得分:4)

语义,这实际上是编写优秀软件的一个非常重要的部分。

一本书不是由作者组成的。一本书作者。

我还会争辩说你对你的例子更简单或代码更清晰是非常错误的。性能改进值得商榷,而且可能微不足道。

你的最后一个案子特别糟糕。如果要搜索特定角色中的所有用户,该怎么办?实例化所有用户,反序列化并一次检查一个用户?