Has_many through: четыре слоя?

Как вы управляете подключением четырехуровневой модели?

Итак, у меня есть группа, в которой много категорий, много экзаменов и столько же тем.

class Group < ApplicationRecord
   has_many :categories
   has_many :exams, through: :categories
   #has_many :topics, through :exams
   accepts_nested_attributes_for :categories
end

class Category < ApplicationRecord
  belongs_to :group
  has_many :exams
end

class Exam < ApplicationRecord
  belongs_to :category
  has_many :topics
  has_one :group, through: :category
  accepts_nested_attributes_for :topics
end

class Topic < ApplicationRecord
  belongs_to :exam
  has_one :category, through: :exam
  #has_one :group, through :category
end

Как мне точно подключить группу к теме, учитывая две таблицы посередине?

(Отредактировано для ясности)

Я не уверен, в чем ваш вопрос ... у вас особая проблема?

matthewd 11.08.2018 12:09

Как подключить тему к группе?

Antonio Fergesi 11.08.2018 12:26

Что происходит, когда вы делаете то, что закомментировали?

matthewd 11.08.2018 12:30
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
3
80
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

What am I missing? Or is it just ridiculous to have four layers?

Не смешно. Просто предоставьте ассоциацию has_manythrough как обычно:

class Group < ApplicationRecord
  has_many :categories
  has_many :exams, through: :categories
  has_many :topics, through: :exams
end

Это сгенерирует SQL, например:

SELECT  "topics".* FROM "topics" INNER JOIN "exams" ON "topics"."exam_id" = "exams"."id" INNER JOIN "categories" ON "exams"."category_id" = "categories"."id" WHERE "categories"."group_id" = ?

Другие вопросы по теме