Используя где, то реляционная ассоциация - PullRequest
0 голосов
/ 29 апреля 2019

Это происходит снова и снова в проекте, над которым я работаю, поэтому я собираюсь попытаться получить ответ раз и навсегда.

Я пытаюсь использовать где, а затем собрать всеассоциации.Я не могу описать проблему хорошо, поэтому на нее можно было ответить раньше (на самом деле, я уверен, что она есть), но вот пример.

У меня есть Applicant_approvals, который представляет собой таблицу соединений между несколькимиразные отношения.Он также имеет свою собственную колонку, approved.Я пытаюсь получить все одобрения заявителя, если заявитель был утвержден, а затем получить этих заявителей.Так что-то вроде:

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

Теперь, конечно, вы не можете этого сделать, потому что where возвращает активную ассоциацию записи.Я не хочу использовать в первую очередь, потому что я хочу, чтобы все кандидаты были одобрены на этом этапе процесса.

Есть ли общепризнанный способ сделать это или мне нужно получить ассоциацию, а затем провести ее через каждого, чтобы получить каждого кандидата?

спасибо.

1 Ответ

1 голос
/ 29 апреля 2019

Вы можете сделать это, установив косвенные ассоциации:

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

Затем просто создайте для ассоциации предложение pop a:

@stage.applicants.where(applicant_approvals: { approved: true })
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...