0

と の 2 つのクラスがTopicありBuy::Topicます。後者は、外部キー ( ) による前者のサブクラスBuy::Topic.topic_id == Topic.idです。したがって、基本的にこれはクラステーブルの継承パターンを使用しています。

Buy::Topic親オブジェクトを指す独自idの外部キーがあります。topic_idTopic

ただし、次のように id が親の idBuy::Topicと同じであることを確認したいと思います。topic_id

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

これはRailsで可能ですか? これは SEO の目的に適しており、Cancan の処理が容易になりますload_and_authorize_resource(cancan は 2 つの間違った ID を使用して検索することがあります)。

更新:

このスキーマは長い間設定され、実行されてきたため、現在 STI に変更される可能性は低いです。

4

2 に答える 2

1

これを行うと、CTI が積極的に破壊され、アンチパターンが作成されることさえあります!

私の主張は、もし、

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

次に、Buy::Topic と Topic の間に 1 対 1 の関係を作成します。

これは、が一部の と衝突する可能性があるBuy::Topicため、他のクラスを構成できないことを意味します。idTopic.id

Buy::Topicは のサブクラスであるためTopic、実際には単一の概念エンティティしかありません。ただし、そこにたどり着くには 2 つのテーブルといくつかのクレイジーなインデックスがあります。

于 2012-03-06T04:32:20.133 に答える
0

おい、これは大丈夫です、あなたの列 topic_parent_id を呼び出して、次のように関連付けを作成してください:

所属先 :parent, :class_name => 'トピック', :foreign_key => 'topic_parent_id'

于 2012-03-06T09:15:37.523 に答える