如何进行嵌套注释,其中第一级是sort desc,第二级是sort asc?

时间:2011-10-30 22:06:19

标签: ruby-on-rails comments nested

我正在使用rails和awesome_nested_set来创建nested_comments(艺术家有很多sketchbook_comments)。我想通过时间戳对第一级进行排序,以便我们可以在顶部看到最新的评论。我希望评论的评论符合时间戳的ASC时间顺序,以便我们可以按照创建它们的顺序进行对话。就像堆栈溢出一样,我计划现在只有1级嵌套。

 #controller
def create

 #create 1st level comment as simple association
 @sketchbook_comment = @artist.sketchbook_comments.create(params[:sketchbook_comment])

 #if replying to a comment, only then do we nest
 if parent = @artist.sketchbook_comments.where(:id => params[:parent_id]).first
   @sketchbook_comment.move_to_child_of(parent)
 end

  redirect_to :back
end

我可以在一次数据库调用中获取关联的所有注释:

artist.sketchbook_comments.order("lft ASC")

但似乎所有新的根级别注释都放在树的“结束”或“右侧”(具有比之前任何节点更大的lft值)。因此,按照lft排序,我只能按时间顺序排列。

有什么建议吗? (我知道我可以通过获取所有根节点顺序(“created_at DESC”)来实现这一点,然后在每个级别运行comment.children.order(“lft ASC”),但是如果可能的话我不想多次命中DB 。)

1 个答案:

答案 0 :(得分:0)

我最后添加了一个模型方法,该方法将使用awesome_nested_set的move_to_left_of(id),以便在插入根级别注释时在左侧定位新节点。