0

私はモデル、、を持ってUserTeamます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か?

4

2 に答える 2

0

Document モデルに default_scope を追加できます。

class Document < ActiveRecord::Base

default_scope group: { documents: :id }
于 2013-09-19T09:06:58.213 に答える