在Ruby on Rails中优化ActiveRecord的方法

2019-09-25 09:43:54丽君

通常,belongs_to 关系只有一个类,但 ContentBase 中的关系却是多态的。外键不仅具有标识记录的标识符,而且还具有标识表的一个类型。使用这种技术,我获得了继承的诸多益处。常见的功能在单一类中就都包括了。但这也带来了几个副作用。我无需将 Cause 和 Nonprofit 中的所有列都放在单一表中。

一些数据库管理员不太看好多态关联,原因是他们不怎么使用真正意义上的外键,但对于 ChangingThePresent,我们自由地使用了多态关联。实际上,数据模型并不像理论上那样美好。不能使用诸如引用完整性这样的数据库特性,也不能依赖于工具来基于列的名称发现这些关系。简洁的对象模型的好处对我们来说要比此方式所存在的问题更为重要。

create_table "content_bases", :force => true do |t|
 t.column "short_description",     :string

 ...

 t.column "displayable_type", :string
 t.column "displayable_id",  :integer
end

结束语

ActiveRecord 是一种功能完善的持久性框架。用它可以构建可伸缩的可靠系统,但与其他数据库框架一样,您必须要格外注意框架所生成的 SQL。当偶尔遇到问题时,您必须调整自己的方式和策略。保留索引、借助 include 使用热加载和在某些地方使用多态关联代替继承是三种可用来改进代码库的方法。在下月,我将带您亲历另一个示例去领略如何编写真实世界中的 Rails。