在类表继承中,如何让父级和子级使用相同的ID?

时间:2012-03-06 03:21:54

标签: ruby-on-rails ruby-on-rails-3 inheritance activerecord class-table-inheritance

我有两个课程:TopicBuy::Topic。后者是前者的子类,通过外键(Buy::Topic.topic_id == Topic.id)。所以基本上这是使用类表继承模式。

Buy::Topic有自己的id,外键topic_id指向父Topic个对象。

但是,我想确保Buy::Topic的ID与父级的topic_id相同,如下所示:

#<Topic id: 22598> #<Buy::Topic id: 22598, topic_id:22598

这在Rails中可行吗?这对于搜索引擎优化目的来说更好,并且可以更容易地处理Cancan的load_and_authorize_resource(有时可以使用错误的id来查找内容)。

UDPATE:

此架构已设置并完成很长时间,因此现在不太可能将其更改为STI。

2 个答案:

答案 0 :(得分:1)

这样做会主动摧毁你的CTI,甚至可能会产生反模式!

我的论点是,如果,

Buy::Topic.id == Buy::Topic.topic_id == Topic.id

然后您在Buy :: Topic和Topic之间创建一对一的关系。

这意味着没有其他类可以由Buy::Topic组成,因为id可能会与某些Topic.id发生冲突。

由于Buy::TopicTopic的子类,因此现在只有一个概念实体。除了你有两个表和一些疯狂的索引来帮助你。

答案 1 :(得分:0)

老兄,这没关系,只需调用你的专栏topic_parent_id并创建这样的关联:

belongs_to:parent,:class_name =&gt; '主题',:foreign_key =&gt; 'topic_parent_id'