Доступ has_many: через с условиями - PullRequest
0 голосов
/ 14 июня 2019

У меня есть модели BatchClass и SubjectTeacherBatchClass, имеющие атрибуты, как показано ниже.

class SubjectTeacherBatchClass < ApplicationRecord
  belongs_to :batch_class
  belongs_to :user, optional: true
  belongs_to :shift
  belongs_to :session_batch
end

и

class BatchClass < ApplicationRecord 
  has_many :subject_teacher_batch_classes
  has_many :subjects, through: :subject_teacher_batch_classes
  has_many :teachers, source: :user, foreign_key: 'user_id', through: :subject_teacher_batch_classes
end

Я хочу получить доступ к batch_class.teachers, но с такими пользовательскими атрибутами, как, например,

batch_class.teachers.where(session_batch_id: session_batch.id, shift_id: current_shift.id)

Проблема в том, что session_batch_id и shift_id не являются атрибутами User класса (псевдоним учителя), но являются атрибутами SubjectTeacherBatchClass класса.(сквозной класс)

Есть ли лучший способ заставить учителей из batch_class передать эти атрибуты по умолчанию (session_batch и shift)

1 Ответ

0 голосов
/ 14 июня 2019

Похоже, https://stackoverflow.com/q/18799934/1154044 вопрос скорее похож на ваш.

Согласно вашим моделям, вы можете попробовать этот запрос

batch_class.teachers.
  references(:subject_teacher_batch_classes).
  where(subject_teacher_batch_classes: {
    session_batch_id: session_batch.id, shift_id: current_shift.id
  })
...