私はモデル、、を持ってUser
いTeam
ますDocument
。ユーザーとチームの間には多対多の関係があり、チームとドキュメントの間には多対多の関係がTeamMembership
あり、TeamDocument
それぞれ と と呼ばれる結合テーブルを使用します。
私のモデルの関係は次のようになります。
class Document < ActiveRecord::Base
has_many :team_documents, dependent: :destroy
has_many :teams, through: :team_documents
end
class User < ActiveRecord::Base
has_many :team_memberships, dependent: :destroy, foreign_key: :member_id
has_many :teams, through: :team_memberships
has_many :documents, through: :teams
end
class TeamDocument < ActiveRecord::Base
belongs_to :team
belongs_to :document
end
class TeamMembership < ActiveRecord::Base
belongs_to :team
belongs_to :member, class_name: "User"
end
class Team < ActiveRecord::Base
has_many :team_documents, dependent: :destroy
has_many :documents, through: :team_documents
has_many :team_memberships, dependent: :destroy
has_many :members, through: :team_memberships
end
ユーザーは多くのチームに所属でき、ドキュメントは多くのチームに関連付けることができ、ユーザーは、ユーザーがメンバーである少なくとも 1 つのチームに「属している」ドキュメントにのみアクセスできます。
質問は次のとおりですUser#documents
。このユーザーが表示を許可されているすべてのドキュメントのリストを取得するために使用できます。ただし、ユーザーがメンバーである複数のチームがドキュメントを表示できる場合、これは重複を返します。どうすればこれを回避できますか?
事後に重複を削除できることはわかっていますが@user.documents.uniq
、いずれにしても重複を含めたくないので、毎回重複を含めないようにする方法はあります#documents
か?