У меня есть дерево комментариев, вложенное в документ, используя mongoid embeds_many_recursively вот так:
Document: {
...
comments: [{
...
updated_at,
child_comments: [{
...
updated_at
child_comments: [{...},{...}],
...},{...}]
...}]
...}]
...}
Каков наиболее эффективный способ передачи его представлению способом, упорядоченным по атрибуту 'comment updated_at' первого уровня?
На данный момент я придумал это внутри основной модели документа:
def flatten_comments
@flat_comments = []
self.comments.order_by([[:updated_at, :desc]]).each do |comment|
flatten_comments_iterator(comment)
end
return @flat_comments
end
def flatten_comments_iterator(comment)
@flat_comments << comment
comment.child_comments.each {|reply| flatten_comments_iterator(reply)}
end
, а затем просто итерация в представлении массива.
Проблемы:
1) при рекурсивном выравнивании порядок где-то теряется, и я не могу понять, где, шаг за шагом на бумаге, кажется, добавляются элементы в нужном порядке, возможно, что-то связанное с областью видимости и доступом к переменной класса.
2) Я не уверен, что это самый эффективный способ простого поиска.
Был бы благодарен за совет и за опыт в том, как эффективно решать такие задачи.