has_many
スルー リレーションシップを実装するために 3 つの異なる方法を行ったり来たりしていますが、どれが最適かを判断するための助けが必要です。
基本的なレベルContributor
では、個人の詳細を保持するProject
モデルがあり、貢献者が貢献できるモデルがあります。彼らはさまざまな方法で貢献できます。aContributor
は、編集者、著者、作曲家、研究者などになることができます。Contributor は、複数の方法で同じものに貢献できProject
(たとえば、作曲家や編集者になることができます)、複数の に貢献できますProjects
。
という結合モデルを設定しましたContributorship
。私の質問は、次に何をするかです。私が見る限り、3つのオプションがあります:
contribution_type
コントリビューションのタイプを保持する属性をContributorship
(事前定義された列挙から) に追加します。との関係を設定するときContributor
、Project
これを適切な値に設定します。で、貢献の種類ごとに 1 つずつ、複数の
has_many through
関係を作成します。Project
それぞれが に解決されContributor
ますが、 で異なる外部キーを使用しContributorship
ます。捨てて、
Contributorship
複数の結合モデルなどに置き換えます。これらはすべて に解決されます。Editor
Author
Contributors