Получить иерархию объектов в Rails, используя один вызов ActiveRecord - PullRequest
1 голос
/ 23 июня 2019

У меня есть простая модель с именем Node и полем с именем parent_id.Основная идея заключается в том, что корень Node имеет parent_id == nil, а затем другие Nodes используют parent_id для ссылки на своего родителя Node.Затем я хочу выполнить обход узлов (сначала в глубину) следующим образом:

def traverse(node) 
 node.children.each do |child_node|
  traverse(child_node)
 end
end

Единственное, чего я хочу избежать, - это сделать несколько обращений к базе данных, чтобы получить мои модели.Можно ли получить такую ​​иерархию в одном запросе?Если да, то как?

Я знаю, что могу сделать это с помощью запроса, подобного Node.all, а затем создать код, который строит всю иерархию, но я полагаю, что это не лучшая практика.Я бы предпочел использовать что-то вроде Node.where(parent_id: nil).includes(children), чтобы получить только рут вместе со ссылками, но я не уверен насчет синтаксиса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...