У меня есть структура навигации, хранящаяся в базе данных. Есть две модели Навигации и Навигационные Элементы.
class Navigation < ApplicationRecord
has_many :navigation_items
scope :all_items, -> {
includes(navigation_items: [:translations, children: :translations])
.order('navigation_items.position asc')
.where(navigation_items: { parent_id: nil })
}
end
class NavigationItem < ApplicationRecord
has_many :children, class_name: "NavigationItem", foreign_key: "parent_id"
belongs_to :parent, class_name: "NavigationItem", foreign_key: 'parent_id', optional: true
belongs_to :navigation
end
Я настраиваю навигацию в контроллере приложения следующим образом
def set_navigation
@navigations = Navigation.all_items
@navigation = []
@footer_navigation = []
@header_navigation = []
if (main = @navigations.detect { |n| n.handle == "main" })
@navigation = main.navigation_items
end
if (footer = @navigations.detect { |n| n.handle == "footer" })
@footer_navigation = footer.navigation_items
end
if (header = @navigations.detect { |n| n.handle == "header" })
@header_navigation = header.navigation_items
end
end
Затем я перебираю каждый элемент navigation_item в макете с вложенным циклом для дочерних элементов.
Все работает хорошо, кроме одной вещи. Все элементы навигации имеют привязанную к ним позицию. Родительские элементы отображаются в правильном порядке, однако дети не подчиняются порядку. Есть ли способ также расположить дочерние элементы навигации в порядке их расположения?