рельсы поиск категории для подкатегорий - PullRequest
0 голосов
/ 24 апреля 2010

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

потому что товар принадлежит_категории, а категория имеет много товаров. Однако функция потомков возвращает массив всех потомков. Как мне отфильтровать их и получить комбинированные продукты?

1 Ответ

1 голос
/ 24 апреля 2010

Переместите именованную область в модель Product, поскольку именно это вы пытаетесь отобразить.

# product.rb    
named_scope :for_category_ids, lambda {|ids| {:conditions => {:category_id => ids}}}

Тогда в вашем контроллере:

@products = Product.for_category_ids(@category.descendants.map(&:id))
...