我有两个课程:Topic
和Buy::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。
答案 0 :(得分:1)
这样做会主动摧毁你的CTI,甚至可能会产生反模式!
我的论点是,如果,
Buy::Topic.id == Buy::Topic.topic_id == Topic.id
然后您在Buy :: Topic和Topic之间创建一对一的关系。
这意味着没有其他类可以由Buy::Topic
组成,因为id
可能会与某些Topic.id
发生冲突。
由于Buy::Topic
是Topic
的子类,因此现在只有一个概念实体。除了你有两个表和一些疯狂的索引来帮助你。
答案 1 :(得分:0)
老兄,这没关系,只需调用你的专栏topic_parent_id并创建这样的关联:
belongs_to:parent,:class_name =&gt; '主题',:foreign_key =&gt; 'topic_parent_id'