Как использовать «где», чтобы получить родительский элемент, имеющий атрибут XYZ - PullRequest
0 голосов
/ 02 ноября 2018

Используя ajax-datatables-rails, я пытаюсь получить записи, которые являются дочерними для родительской модели.

Например, у меня есть родительская модель с именем School, которая имеет множество teachers, каждая из которых имеет множество students.

Если я использую Student.joins(:teacher), но учитель принадлежит к школе, как я могу написать это так, чтобы она оттягивала только учеников, принадлежащих к учителям, принадлежащих к определенной школе.

Я пытаюсь найти способ сделать что-то вроде: Student.joins(:teacher => [:school where school_name == "hello world"]) хотя я знаю, что это неправильный синтаксис.

Вот структура модели:

# app/models/school.rb
class School < ApplicationRecord
    has_many :teachers
end

.

# app/models/teacher.rb
class Teacher < ApplicationRecord
    belongs_to :school
    has_many :students
end

.

# app/models/student.rb
class Student < ApplicationRecord
    belongs_to :teacher
end

Ответы [ 2 ]

0 голосов
/ 02 ноября 2018

Вы также можете использовать has_many through ассоциацию для достижения этой цели. Ссылка

приложение / модели / school.rb

class School < ApplicationRecord
  has_many :teachers
  has_many :students, through: :teachers
end

приложение / модели / teacher.rb

class Teacher < ApplicationRecord
    belongs_to :school
    has_many :students
end

приложение / модели / student.rb

class Student < ApplicationRecord
  belongs_to :teacher
end

Допустим, вы хотите получить список учеников конкретной школы, который можно запросить, например.

School.find_by_name('ABC School').students
0 голосов
/ 02 ноября 2018

Сначала выполните объединения, а затем отфильтруйте интересующую вас таблицу:

Student.joins(teacher: :school).where(schools: { name: "hello world" })
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...