ruby-on-rails - Rails 数据库中的继承

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

我正在为我的 Rails 项目规划一个数据库图表。
我有以下实体:Answer(继承自 Post)、Question(也继承自 Post)和 Comment。
评论属于答案或问题。
我将如何继续这样做?

我想过创建一个 Posts 表,同时拥有 Questions 和 Answers 表,每个问题和每个答案都有一个条目。然后我会有一个连接评论和帖子的表格。
我觉得这个解决方案不够干净,不够通用。

最好和最有效的方法是什么?

编辑:
我对 STI(单表继承)解决方案不感兴趣。我们正在寻找一种有效的解决方案,因为这将(希望)成为一个包含许多帖子的大型项目。

最佳答案

默认的 Rails 继承模型是单表继承,是最简单、最干净、最通用且与数据库无关的事情。

只需让 Answer 和 Question 继承自 Post 即可完成。然后创建一个 posts 表,其中包含您在 Post、Answer 和 Question 中所需的所有字段。

单表继承并不是最节省空间的技术,因为 posts 表中的所有行都将包含 所有 Post、Answer 和 Question 字段。但它是传统的,如果你在路上遇到空间问题,你将能够很好地迁移到更具可扩展性的数据模型(如多表继承)。从某种意义上说,单表继承是高效的,因为它只需要一个查询就可以按 ID 查找帖子,而在其他数据模型中,可能需要一个额外的查询来查找帖子所在的表(帖子、问题、答案)。

至于连接 Comments 和 Posts,您可以在 Comment 模型中使用指向 Post 的 belongs_to 关系和在指向 Comment 的 Post 模型中使用 has_many 关系. (您需要在评论表中添加一个 post_id 整数字段才能使其正常工作)。

比照。 http://guides.rubyonrails.org/association_basics.html

您还需要为 post_id 上的评论添加索引,以便快速查询帖子的所有评论:http://guides.rubyonrails.org/migrations.html .

关于ruby-on-rails - Rails 数据库中的继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7223882/

相关文章:

javascript - 有没有办法重新生成 link_to_add_association(特别是数据关联插入模板)?

css - Foundation Icon 字体未正确调整大小

ruby-on-rails - 删除字符串中的第一个 "#"字符 - Rails

ruby-on-rails - ArgumentError : Relation passed to #or must be structurally compatible.值不兼容:[:joins]

ruby-on-rails - 如果 Rails 查询中存在关联,则包含关联

ruby-on-rails - 如何在保存多态对象之前获取其父对象?

ruby - 匹配不以 test.js 结尾但以 .js 结尾的文件的正则表达式

ruby-on-rails - 是否可以在 Rails 5 的索引页面上创建表单?

ruby-on-rails-3 - 用于 rake 任务的 rails admin

ruby-on-rails - 路径助手生成带有点而不是斜杠的路径