我有模型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
这个想法是用户可以属于多个团队,一个文档可以与多个团队相关联,并且用户只能访问“属于”用户所属的至少一个团队的文档。
问题是:我可以User#documents
用来检索允许该用户查看的所有文档的列表。但是,如果用户所属的多个团队可以查看文档,这将返回重复项。我怎样才能避免这种情况?
我知道我可以在事后使用 删除重复项@user.documents.uniq
,但是由于无论如何我都不想包含重复项,有没有一种方法可以让我每次#documents
都不包含重复项?