我正在使用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 。)
答案 0 :(得分:0)
我最后添加了一个模型方法,该方法将使用awesome_nested_set的move_to_left_of(id),以便在插入根级别注释时在左侧定位新节点。