我有User
、Assignment
和Account
模型。用户可以属于许多帐户,并且帐户具有许多分配。作为帐户的管理员,您可以将用户"分配"到分配。我正在尝试查找分配给特定任务的用户数量。此外,用户和分配具有一个名为 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
理想情况下,您只需要一张桌子