【发布时间】:2012-03-06 03:21:53
【问题描述】:
我有两个课程:Topic 和 Buy::Topic。后者是前者的子类,通过外键 (Buy::Topic.topic_id == Topic.id)。所以本质上这是使用类表继承模式。
Buy::Topic 有自己的id 和指向父Topic 对象的外键topic_id。
但是我想确保Buy::Topic 的 id 与父级的topic_id 相同,如下所示:
#<Topic id: 22598> 与
#<Buy::Topic id: 22598, topic_id:22598
这在 Rails 中可行吗?这对于 SEO 来说更好,并且可以更轻松地处理 Cancan 的 load_and_authorize_resource(有时 cancan 使用两者的错误 id 来查找内容)。
UDPATE:
这个架构已经设置和完成了很长时间,所以现在不太可能将其更改为 STI。
【问题讨论】:
-
如果您希望 id 匹配,感觉 STI 会是更好的选择。您始终可以将 Buy::Topic 定义为 Topic 的特例...
-
是的,我想了一下,原因是子类的其他字段太多了。
-
...这很糟糕,因为?引用 Knuth 的话“过早的优化是万恶之源”。存储空间便宜得离谱。如果您的核心要求是 SEO 的“让 id 保持不变”,那么请针对此进行优化,而不是针对存储进行优化。
标签: ruby-on-rails ruby-on-rails-3 inheritance activerecord class-table-inheritance