У меня есть набор категорий, относящихся к набору категорий. Эти категории сами могут иметь сочетание категорий (self-referential), а также вопросы. модели и их отношения определяются & визуализируется следующим образом:Модель has_many И has_many: через в одном?
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-операторов (см. Ниже пример).
Адрес КатегорияSet.find (1) .categories находит только прямые категории потомков категории. Кроме того, Category.find (id) .questions возвращает только вопросы для этой категории.
Я попытался переписать метод . по категориям, но это не кажется очень рельс-отношениями, и должен быть лучший способ сделать это? Ало это означает, что я не могу сделать CategorySet.includes (: вопросы) .all синтаксис стиль, который значительно снижает нагрузку на сервер базы данных
Почему этот ответ не был принят, это отличный ответ. – Yule
Прошу прощения, кажется, я дал вам достойный голос, но забыл отметить его как принятый. Я реализовал решение, основанное на вышеизложенном, и оно отлично поработало. Благодаря! –