如何通过联接表根据关联查找记录数



我有UserAssignmentAccount模型。用户可以属于许多帐户,并且帐户具有许多分配。作为帐户的管理员,您可以将用户"分配"到分配。我正在尝试查找分配给特定任务的用户数量。此外,用户和分配具有一个名为 assignment_relationships 的联接表。该表有一个布尔值,如果用户被分配到该表,该布尔值将翻转 - 该属性称为designated。这有点令人困惑,但它应该非常简单。以下是关联:

用户:

class User < ApplicationRecord
  has_many :account_memberships
  has_many :accounts, through: :account_memberships
  has_many :assignment_relationships
  has_many :assignments, through: :assignment_relationships
end

帐户:

class Account < ApplicationRecord
  has_many :assignments
end

分配:

class Assignment < ApplicationRecord    
  belongs_to :account
  has_many :assignment_relationships
  has_many :users, through: :assignment_relationships
end

Assignment_relationships:

class AssignmentRelationship < ApplicationRecord
  belongs_to :user
  belongs_to :assignment
end

因此,回顾一下,我正在尝试找到一个查询,该查询将告诉我有多少用户被分配到特定分配。感谢您的帮助!

我觉得

我可能在你的问题中遗漏了一些东西(因为我的答案非常简单(,但你为什么不能这样做:

@assignment.users.count

由于您似乎已正确设置has_many, through:关系,因此在Assignment对象上调用users应正确遍历assignment_relationships联接表,以返回连接到分配的任何用户。

SELECT count(users.id), assignments.id
FROM assignment_relationships
WHERE designated IS TRUE
GROUP BY assignments.id

理想情况下,您只需要一张桌子

相关内容

  • 没有找到相关文章

最新更新