然后使用位置关系关联

时间:2019-04-29 16:18:56

标签: ruby-on-rails activerecord

这个问题在我正在研究的项目中一次又一次出现,所以我将一劳永逸地寻求答案。

我正在尝试使用where,然后收集所有关联。我无法很好地描述问题,因此可能以前已经回答过(实际上,我确定已经解决了),但这是一个示例。

我有applicant_approvals,这是一些不同关系之间的联接表。它还有自己的列approved。我正在尝试获得所有已获得批准的申请人的批准,然后再获得这些申请人。像这样:

  @stage.applicant_approvals
        .where(approved: true)
        .applicants

现在,您当然不能这样做,因为where返回了活动记录关联。我不想首先使用,因为我希望所有已批准该阶段程序的申请人。

是否有公认的方法来做到这一点,或者我需要获得关联,然后逐个运行以获得每个申请人?

谢谢。

1 个答案:

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