如何通过连接表查找基于关联的记录数

时间:2017-02-11 03:01:40

标签: mysql ruby-on-rails ruby rails-activerecord

我有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

作为回顾,我正在尝试查找一个查询,告诉我有多少用户被分配到特定的作业。谢谢你的帮助!

2 个答案:

答案 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

理想情况下你只需要一张表