У меня есть набор категорий, принадлежащих к набору категорий.Эти категории сами могут иметь сочетание категорий (самообращения), а также вопросов.Модели и их отношения определяются и визуализируются следующим образом:
class CategorySet < ActiveRecord::Base
has_many :categories
end
class Category < ActiveRecord::Base
belongs_to :category_set
belongs_to :parent_category, :class_name => "Category"
has_many :categories, :class_name => "Category", :foreign_key => "parent_category_id", dependent: :destroy
has_many :questions, dependent: :destroy
end
class Question < ActiveRecord::Base
belongs_to :category
end
Abbrev to CS, C and Q:
CS
|- C
|- Q
|
|- C
|
|- C
| |- Q
|
|- C
|- Q
|- Q
Я хотел бы иметь возможность задавать CategorySet.find (1) .questions и возвращать все вопросы в дереве независимо от положения.Единственные способы, которыми я могу придумать, использовать множество запросов на основе функций, и, вероятно, это будет излишним для операторов SQL (см. Ниже пример).* находит только прямые категории потомков из набора категорий.Кроме того, Category.find (id) .questions возвращает только вопросы для этой категории.
Я пытался перезаписать метод .questions для категорий, но это нене кажется, что отношения очень рельсовы, и должен быть лучший способ сделать это?Это означает, что я не могу использовать синтаксис стиля CategorySet.includes (: questions) .all, который значительно снижает нагрузку на сервер базы данных