0

クラス テーブルの継承を使用して、サブクラスがスーパークラスを参照することをお勧めします。その逆ではありません。通常、Rails では、ポリモーフィックな関連付けは逆方向に機能します。つまり、スーパーはサブクラスを参照します。

おすすめされた

vehicle
  .id

car
  .vehicle_id # PK instead of using id (identity column)

boat
  .vehicle_id

典型的な Rails ポリモーフィック アソシエーション

vehicle
  .id
  .subclass_type
  .subclass_id

car
  .id

boat
  .id

推奨されるアプローチで私が気に入っているのは、一致しないキーをなくすことができることです。つまり、特定の車とそのビークル スーパーは同じ ID を共有します。

私の特定の例では、複数の継承をサポートする可能性があるため、たとえば、乗用車とボートのハイブリッド車を作成できます。

質問:

  • ActiveRecord の関連付けをどのように設定しますか...

    • 車両がサブクラスを 1 つしか持てないとしたら?

    • 車両が多くのサブクラスを持つことができるとしたら? (ここで私が目にする問題は、特定の subclass_type を指定しないことによって、どのテーブルにヒットするかをアソシエーションがどのように知るかということです。私はそれらがヒットするとは思わないので、可能なすべてのテーブルにヒットしなければならないでしょう。したがって、おそらく交差テーブルがここで役立ちます. )

  • これは ActiveRecord で使用するのに適した設計パターンですか?それとも、Rails のやり方に逆らって避けるべきでしょうか?

4

1 に答える 1

0

私は最も単純な解決策を選びました: ポリモーフィック アソシエーション (2 番目のブロックに示されているように) を使用します。パフォーマンスが向上し、保守性が向上します。

于 2009-10-04T14:01:10.100 に答える