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