1

ユーザーがコースを作成し、コースにさまざまな種類のリソース(ドキュメント、ビデオ、クイズ)を含めることができるアプリを作成しています。コースとそのリソースの間に関連付けを設定するための最良の方法を見つけるのに苦労しています。

今、私は持っています:

    class Course < AR::Base
      has_many :documents
      has_many :videos
      has_many :quizzes
    end

    class Document <AR::Base
      belongs_to :course
    end

    class Video <AR::Base
      belongs_to :course
    end

    class Quiz <AR::Base
      belongs_to :course
    end

ドキュメント、ビデオ、およびクイズにはすべて、いくつかの共通の属性(名前、説明など)がありますが、異なる多くの属性もあります。STIを使用して、「レッスン」と呼ばれる単一のクラスから継承させることを検討しました。クラスごとに複数のコントローラーが必要なため、このアプローチに反対することにしました。

最終的には、コースに属するすべてのリソースに対して操作を実行できるようにしたいので、たとえば、すべてのドキュメント、ビデオ、およびクイズをまとめてリストし、それらを並べ替え可能なリストとして表示します。

このモデルを設定するための最良の方法に関する提案。私はそれを2つの方法で行うことができるようです:

  • 逆多形has_oneアソシエーション(を参照)
  • 複数のテーブル継承(を参照)

私はレール初心者なので、この状況に最適なアプローチを評価するのに苦労しています。アドバイスをいただければ幸いです。

4

1 に答える 1

0

最終的には、コースに属するすべてのリソースに対して操作を実行できるようにしたいので、たとえば、すべてのドキュメント、ビデオ、およびクイズをまとめてリストし、それらを並べ替え可能なリストとして表示します。

どちらのアプローチも実行可能ですが、私がこの要件を読んだとき、あなたはSTIを使うのが最善のようです。STIは、Railsでネイティブにサポートされている機能であり、同じコレクション内のさまざまなタイプのリソースを照会および操作できます。

于 2012-07-09T17:52:06.313 に答える