Задать вопрос
@andreychumak
junior

Как разделить элементы массива на родительские и дочерние?

Есть массив типа
category = ["Комплектующие для ПК", "ПО", "ОС"]
Кол-во элемент может приходить разное.
По ним создаются Category из .csv файла.
В данном массиве category нужно чтобы category[0] был родителем, а category[1] - дочерней категорией, но родителем для category[2]
Т.е. Комплектующие для ПК => ПО => ОС

Использую гем Ancestry

Для двух элементов работает такой код (хоть и некрасивый):

last = nil

  csv.each do |row| # в row строки из таблицы 
    base = row[6].split('/')[0] # здесь получаю первый элемент массива
    parent_category = Category.create!(name: base) if Category.where(name: base).first.nil? # Создаю базовую категорию

    row[6].split('/').each do |category| # перебираю категории
      if Category.where(name: category).first.nil? # если категории не существует
        last = Category.create!(name: parent_category) if last == nil # то создаю базовую
        # если базовая есть то создаю ей дочерние
        child = Category.create!(name: category, ancestry: Category.where(name: base).first.id) if last != nil
      end
    end
  end

Подскажите как реализовать такой код для любого кол-ва элементов?
  • Вопрос задан
  • 115 просмотров
Подписаться 2 Средний Комментировать
Решения вопроса 1
Dem1
@Dem1 Куратор тега Ruby on Rails
Ruby on Rails developer
category = ["Комплектующие для ПК", "ПО", "ОС"]
ancestry = Category.find_or_create_by!(name: category.shift)
category.each do |value|
  ancestry = Category.find_or_create_by!(name: value, ancestry: ancestry)
end
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы