Есть ли лучший подход для отображения записей о детях и внуках?
Мне нужно собрать всех авторов в дереве, как:
parent
|
+- child #1
|
+- child #1
| |
| +- grand child #1
| |
| +- grand child #2
|
+- child #2
...
(Исходная запись может иметь n дочерних элементов, и у каждого ребенка также может быть m дочерних элементов. Максимальная глубина от исходной записи равна 2: Post - Child - Grandchild)
Каков наилучший подход в Ruby on Rails для сбора всех авторов (пост принадлежит автору)? Мой текущий подход заключается в следующем, но, похоже, он не очень эффективен:
def all_authors_in(post)
@authors = Array.new
@authors << post.author
post.children.each do |child|
@authors << child.author
child.children.each do |grandchild|
@authors << grandchild.author
end
end
@authors.map{|u| u.id}.uniq
end
Немного кода из модели:
class Post < ActiveRecord::Base
belongs_to :parent, class_name: 'Post'
has_many :children, foreign_key: :parent_id, class_name: 'Post', :dependent => :destroy
#...
end
Спасибо
1 ответ
Решение
Я предполагаю, что вы используете наследование одной таблицы для вашего Post
модель, но вы не сказали, если вы катали свою собственную версию. Я бы порекомендовал использовать драгоценный камень предков. Тогда вы можете сделать что-то простое, как это:
@authors = post.subtree.collect(&:author).uniq