我有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
作为回顾,我正在尝试查找一个查询,告诉我有多少用户被分配到特定的作业。谢谢你的帮助!
答案 0 :(得分:1)
我觉得也许我在你的问题中遗漏了一些东西(因为我的答案非常简单),但为什么你不能这样做:
@assignment.users.count
由于您似乎已正确设置has_many, through:
关系,因此在users
对象上调用Assignment
应正确浏览assignment_relationships
联接表以返回任何用户连接到作业。
答案 1 :(得分:0)
SELECT count(users.id), assignments.id
FROM assignment_relationships
WHERE designated IS TRUE
GROUP BY assignments.id
理想情况下你只需要一张表