Rails: act_as_tree и act_as_sane_tree

Это первый раз, когда я моделирую иерархию в рамках одной и той же модели (категории продуктов).

Я нашел отличный сообщение по этой теме. Поскольку я использую Rails 4 и Postgres, которые, согласно статье, поддерживают рекурсивные запросы (это первый раз, когда я слышу этот термин), кажется, что «список смежности с рекурсивным запросом» — это то, что нужно, потому что его легко моделировать и быстро на запрос.

В статье предлагается гем acts_as_sane_tree, поддерживающий рекурсивные запросы. Этот репозиторий не обновлялся два года, и я не уверен, поддерживает ли он Rails 4. Проект является ответвлением acts_as_tree", который поддерживает Rails 4 и хорошо поддерживается.

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


person migu    schedule 13.10.2013    source источник


Ответы (2)


Если вы сомневаетесь, какой гем использовать, я всегда советую взглянуть на набор инструментов Ruby. Это помогает оценить, активен ли проект драгоценного камня, сколько разработчиков использует этот драгоценный камень и многое другое. Почему ты это знаешь? Не хотите выбирать драгоценный камень, который больше не поддерживается. Вы хотите использовать инструменты, которые использует сообщество, и оставаться как можно ближе к мейнстриму. Если вы не будете следовать сообществу, вы столкнетесь с проблемами, если вам понадобится исправить ошибку, получить дополнительную документацию или обновить версию Rails.

В этом случае хорошими кандидатами являются для вложенной ActiveRecord awesome_nested_set и ancestry. Я бы не стал выбирать реализацию Recursive Query, потому что большинство баз данных ее не поддерживают. Если у вас нет очень веской причины, не стоит привязывать ваше приложение к конкретной системе управления базами данных.

person spickermann    schedule 13.10.2013

Вы рассматривали жемчужину предков?

«Он предоставляет все стандартные отношения древовидной структуры (предки, родитель, корень, дети, братья и сестры, потомки), и все они могут быть получены в одном SQL-запросе».

person jirikolarik    schedule 13.10.2013
comment
Спасибо за ответ. Из того, что я прочитал, список смежности с рекурсивным запросом имеет несколько преимуществ перед перечислением путей (жемчуг предков): 1. Ссылочная целостность, 2. Более простой запрос дочерних элементов, 3. Нет ограничений на глубину иерархии, 4. Только один запрос для обновления /вставить/удалить. Источники: gmarik.info/blog/2012/10/ 14/ / slideshare.net/billkarwin/models-for-hierarchical -data / stackoverflow.com/questions/4907698/ - person migu; 13.10.2013