更新についてはコメントを参照してください。
私はこれについて明確で率直な答えを得るのに苦労してきました。今回はそれを得られることを願っています! :D もちろん、Rails についてはまだまだ学ぶべきことがたくさんありますが、直面している問題は理解できているので、さらに助けていただければ幸いです。
- 「タスク」というモデルがあります。
- 「ターゲット」と呼ばれる抽象モデルがあります。
- Target のサブクラスの複数のインスタンスを Task に関連付けたいと思います。
- 単一テーブルの継承を使用していません。
- ポリモーフィックな関係をクエリして、Target のサブクラスの混合結果セットを返したいと考えています。
- Target のサブクラスの個々のインスタンスを照会して、関連するタスクを取得したいと考えています。
したがって、Task と Target のサブクラスとの間の多対多の多態的な関係が適切であると考えています。より詳細には、コンソールで (もちろん他の場所でも) 次のようなことができるようになります。
task = Task.find(1)
task.targets
[...array of all the subclasses of Target here...]
しかし!モデル「店舗」、「ソフトウェア」、「オフィス」、「乗り物」が存在すると仮定すると、これらはすべて「ターゲット」のサブクラスであり、関係を逆方向にトラバースすることもできます。
store = Store.find(1)
store.tasks
[...array of all the Tasks this Store is related to...]
software = Software.find(18)
software.tasks
[...array of all the Tasks this Software is related to...]
ポリモーフィックなリレーションシップによって暗示されるデータベース テーブルは、このトラバーサルを実行できるように見えますが、ポリモーフィックなリレーションシップの精神を打ち負かす答えを見つけようとする際に、繰り返し発生するテーマがいくつか見られます。
- 私の例を引き続き使用すると、人々は Store、Software、Office、Vehicle を Task で定義したいと考えているように見えますが、これは 1 つのタイプのモデルしか返さないため、ポリモーフィックな関係ではないことがすぐにわかります。
- 最後のポイントと同様に、タスク内の店舗、ソフトウェア、オフィス、および車両を一方向の形または形式で定義したいと考えています。ここで重要なのは、関係がサブクラス化に対してブラインドであることです。私のポリモーフは、最初は個々のサブクラス タイプとしてではなく、ターゲットとしてのみ相互作用します。Task で各サブクラスを定義すると、ポリモーフィックな関係の目的が失われ始めます。
- 結合テーブルのモデルが適切である可能性があることがわかりました。これは、Rails が喜んで廃止すると想定していた複雑さを追加することを除けば、ある程度正しいように思えます。これについては未経験でお願いします。
これは、Rails の機能またはコミュニティ全体の知識に小さな穴があるようです。うまくいけば、stackoverflow が私の答えの検索を記録できることを願っています!
助けてくれたみんなに感謝します!