WedX - журнал о программировании и компьютерных науках

Получить все продукты, принадлежащие к категории или родительской категории

У меня есть структура категории, например:

- Cars
  - 4 Door
    - Sedan
    - SUV
  - 2 Door
    - Sports
    - Race 

Продукт может принадлежать одной категории, и, учитывая то, как я настроил пользовательский интерфейс, пользователь может выбирать только из конечного узла.

class Product < ActiveRecord::Base
  belongs_to :category
end

class Category < ActiveRecord::Base
  has_many :subcategories, class_name: 'Category', foreign_key: 'parent_id', dependent: :destroy
  belongs_to :parent_category, class_name: 'Category'
  has_many :products
end

Теперь, когда они просматривают, я без проблем могу перечислить продукты из категории «Седан». Но как насчет того, когда они нажимают «Автомобили», должны отображаться все продукты в 4-дверных (седан, внедорожник) и 2-дверных (спорт, гонки), поскольку они являются дочерними категориями.

Или, когда они нажимают на 4 двери, должны быть перечислены все продукты в седанах и внедорожниках. Имеет ли это смысл?

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


  • Вы пробовали разные вещи в консоли rails? Можете ли вы показать нам код, который вы пробовали? и результаты, которые вы ожидаете v что вы получаете? 26.03.2014
  • @category.products извлекает только товары из этой категории, а не из подкатегорий. 26.03.2014
  • и какие результаты вы получаете, когда пробуете это в консоли rails? 26.03.2014
  • Это прямо в моем предыдущем комментарии: извлекает только продукты, которые находятся в этой категории, а не в подкатегориях. 26.03.2014
  • нет, фактические результаты, а не описание результата... также - не раздражайтесь на меня за то, что я прошу вас уточнить ваш вопрос... 26.03.2014
  • Я настоятельно рекомендую вам использовать github.com/collectiveidea/awesome_nested_set . 26.03.2014

Ответы:


1

Возможно, вы захотите использовать рекурсию для их получения, например:

def get_products(category)
    products = category.products.to_a
    category.subcategories.each do |sub|
      products << get_products(sub)
    end

    products
end

Он должен принадлежать модели Category

26.03.2014
  • Спасибо, я попробую! 26.03.2014
  • По какой-то причине, когда я запускаю это, все продукты в коллекции имеют category_id, установленный на идентификатор корневой родительской категории. Записи базы данных действительно обновляются! 26.03.2014
  • @Serg У меня есть фиксированный код, я помещаю все отношение в переменную products, отсюда и эффект. Обновление заключается в том, что вызов to_a удалит из него всю магию ActiveRecord (надеюсь). 26.03.2014

  • 2
    def get_products(category)
      products = category.products.to_a
      category.subcategories.each do |sub|
        products << get_products(sub)  # Change to products += get_products(sub)
      end
      products
    end
    

    Благодаря Migol, он решил для меня рекурсивную проблему. Однако просто хочу, чтобы люди знали, что products ‹‹ get_products означает "Вставка массива как объекта в массив".

    Я изменил его на products += get_products. Это фактически объединяет массивы, которые я действительно хотел.

    29.05.2015
    Новые материалы

    Объяснение документов 02: BERT
    BERT представил двухступенчатую структуру обучения: предварительное обучение и тонкая настройка. Во время предварительного обучения модель обучается на неразмеченных данных с помощью..

    Как проанализировать работу вашего классификатора?
    Не всегда просто знать, какие показатели использовать С развитием глубокого обучения все больше и больше людей учатся обучать свой первый классификатор. Но как только вы закончите..

    Работа с цепями Маркова, часть 4 (Машинное обучение)
    Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

    Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
    Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..

    Использование машинного обучения и Python для классификации 1000 сезонов новичков MLB Hitter
    Чему может научиться машина, глядя на сезоны новичков 1000 игроков MLB? Это то, что исследует это приложение. В этом процессе мы будем использовать неконтролируемое обучение, чтобы..

    Учебные заметки: создание моего первого пакета Node.js
    Это мои обучающие заметки, когда я научился создавать свой самый первый пакет Node.js, распространяемый через npm. Оглавление Глоссарий I. Новый пакет 1.1 советы по инициализации..

    Забудьте о Matplotlib: улучшите визуализацию данных с помощью умопомрачительных функций Seaborn!
    Примечание. Эта запись в блоге предполагает базовое знакомство с Python и концепциями анализа данных. Привет, энтузиасты данных! Добро пожаловать в мой блог, где я расскажу о невероятных..


    Для любых предложений по сайту: [email protected]