http://github.com/collectiveidea/awesome_nested_set
потрясающий плагин для вложенных множеств, и в настоящее время, если я выберу подкатегорию в качестве моего category_id для элемента, я не смогу искать по его родителю.
Category.parent
Category.Child
Я выбираю Category.child в качестве категории, в которой находится мой элемент. Так что теперь в моем элементе хранится category_id из 4.
Если я зайду на страницу в своем приложении rails, скажем, на странице Category, и я на странице Category.parent, я хочу показать продукты, которые также имеют category_id для всех потомков.
Так что в идеале я хочу иметь метод find, который может учитывать потомков. Вы можете получить потомков корня, вызвав root.descendants (встроенный метод плагина).
Как мне сделать так, чтобы я мог запросить находку, которая получает потомков корня вместо того, что он делает сейчас, ничего не выдумывая, если у продукта нет определенного category_id для Category.parent.
Надеюсь, мне здесь ясно. Мне либо нужно найти способ создать метод find или named_scope, который может запрашивать и возвращать массив объектов, имеющих идентификатор, соответствующий потомкам корня ИЛИ, если у меня есть какие-либо другие параметры, что это?
Я думал о создании в моей таблице продуктов поля, такого как parent_id, который может отслеживать родительский объект, чтобы затем я мог создать две именованные области, одну для поиска родительских элементов, а другую для поиска дочерних элементов и их цепочки.
Я знаю, что могу создать именованную область для каждого дочернего элемента и объединить их в цепочку для нескольких дочерних элементов, но это кажется очень утомительным процессом, а также, если вы добавите больше дочерних элементов, вам потребуется указать больше именованных областей.
//this is what i tried first
@category = Category.find(params[:id])
@child_products = @category.descendants.products
//this actually works but only for one
@child_products = @category.descendants.first.products
потому что товар принадлежит_категории, а категория имеет много товаров. Однако функция потомков возвращает массив всех потомков. Как мне отфильтровать их и получить комбинированные продукты?