这个问题在我正在研究的项目中一次又一次出现,所以我将一劳永逸地寻求答案。
我正在尝试使用where,然后收集所有关联。我无法很好地描述问题,因此可能以前已经回答过(实际上,我确定已经解决了),但这是一个示例。
我有applicant_approvals,这是一些不同关系之间的联接表。它还有自己的列approved
。我正在尝试获得所有已获得批准的申请人的批准,然后再获得这些申请人。像这样:
@stage.applicant_approvals
.where(approved: true)
.applicants
现在,您当然不能这样做,因为where
返回了活动记录关联。我不想首先使用,因为我希望所有已批准该阶段程序的申请人。
是否有公认的方法来做到这一点,或者我需要获得关联,然后逐个运行以获得每个申请人?
谢谢。
答案 0 :(得分:1)
您可以通过设置间接关联来做到这一点:
class Applicant < ApplicationRecord
has_many :applicant_approvals
has_many :stages, through: :applicant_approvals
end
class ApplicantApproval < ApplicationRecord
belongs_to :applicant
belongs_to :stage
end
class Stage < ApplicationRecord
has_many :applicant_approvals
has_many :applicants, through: :applicant_approvals
end
然后只需在关联上弹出一个where子句:
@stage.applicants.where(applicant_approvals: { approved: true })