- Rails: 2.3.8, Ruby: 1.9.2v180, MySQL: 5.1.56 -
У меня есть рекурсивная модель с именем ExternalCategory, которая
belongs_to :parent, :class_name => "ExternalCategory", :foreign_key => "parent_id"
и
has_many :children, :class_name => "ExternalCategory", :foreign_key => "parent_id"
Я отображаю эту иерархию в разбивке по страницам, где изначально отображается только некоторое количество категорий верхнего уровня.Все предки этих категорий верхнего уровня загружаются на страницу, но отображаются только через js.
Внешняя категория может иметь более 1000 предков, поэтому без активной загрузки эти страницы могут занять огромное количество времени для загрузки.Тем не менее, я работаю над добавлением нетерпеливой загрузки соответствующим образом, но я не совсем уверен, что это будет.Возможно, вы можете помочь.
В данный момент у меня есть область видимости для top_level_categories внутри ExternalCategory:
named_scope :top_level_categories, :conditions => "parent_id is null"
, а затем прикреплена к концу строки has_many :children ...
вышеЯ добавил это предостережение:
, :include => :children
Так что теперь, когда я загружаю дочерние элементы любой внешней категории, загружаются дочерние элементы этих детей вместе с дочерними элементами всех этих детей и так далее.В идеале, я бы не делал это в самой модели, а скорее в области видимости, но сейчас я согласен с этим кусочком дерьма.
Основная проблема со всем этимчто я создаю в своей таблице идентификаторы строк, которые ссылаются на идентификатор текущего элемента, а также все идентификаторы его предков.Этот идентификатор используется js при развертывании / сворачивании дочернего представления любой категории.Чтобы создать эти идентификаторы, я обращаюсь к предкам текущей категории с помощью рекурсивных вызовов #parent.В результате я получаю тонну одинаковых строк, которые выглядят так:
CACHE (0,0 мс) SELECT * FROM external_categories
WHERE (external_categories
. id
= 216)
Если я не буду давать строкам все уникальные идентификаторы, это полностью разрушит страницу (очевидно), но вещи начнут загружаться разбитыми ликами.
Любые советы, альтернативные перспективы или что бы вы оценили по достоинствуэтот пункт.
Заранее спасибо!