次の状況に必要な関連付けを理解するのに苦労しています。
「人」、「グループ」、「プロジェクト」、または「オフィス」のいずれかに添付できる「アップロード」があります。
アップロードは、同時に複数の人、グループ、またはプロジェクトに属する必要があります(つまり、2 人、3 つのプロジェクト、1 つのグループ、2 つのオフィスにリンクできます)。
個人、プロジェクト、グループ、またはプロジェクトには、複数のアップロードを関連付けることができます。
オブジェクトに関連付けられたすべてのアップロード (例: @project.uploads) と、アップロードがリンクされているすべてのアイテム (@upload.linked_to などの単一のメソッド) を取得できるようにしたいと考えています。
将来的にアップロードをリンクしたい他のモデルがあるかもしれないので、より柔軟にしたいので、可能な関連付け (projects_uploads、people_uploads、office_uploads) ごとにテーブルを作成しないようにしています。
ポリモーフィックな関連付けが必要かもしれません...しかし、私が達成しようとしているものとまったく同じ例は見つかりませんでした。
誰かが私を正しい方向に向けることができますか?
ありがとうございました!必要に応じて、質問を明確にすることができます:)
編集: 解決しました!これは私がそれを設定した方法です:
モデル
Upload.rb
class Upload < ActiveRecord::Base
has_many :upload_connections
def linked # Shortcut for @upload.upload_connections
self.upload_connections
end
end
Upload_connection.rb
class UploadConnection < ActiveRecord::Base
belongs_to :uploadable, :polymorphic => true
belongs_to :upload
end
Project.rb / Office.rb / Person.rb など
class Project < ActiveRecord::Base
# (same for project, office, person, etc.)
has_many :upload_connections, :as => :uploadable
has_many :uploads, :through => :upload_connections
end
テーブル構造
アップロード
id: integer
filename: string
description: string
Upload_connections
id: integer
uploadable_id: integer
uploadable_type: string
upload_id: integer
... さらに、それらを関連付けるオブジェクトのテーブル。