我有一个带有嵌套评论的表格,它们有comment_id
指向父评论的字段。我输入has_many :comments, :class_name => "Comment"
了评论的模型,所以我有一棵树。问题是如何利用 Rails 和 ActiveRecord 的所有功能从数据库中获取整个评论树并以 json 格式对其进行响应?我知道祖先
,但我想找到没有任何侧面宝石的解决方案。我想学习在 Rails 中操作树状结构的最佳方法,因为这个任务会在我进一步的练习中一次又一次地出现。
更新:
我在这里找到了一些相关的问题并使用了答案。我在模型中定义方法
def self.get_tree(comments)
comments.map { |comment|
{:responses => get_tree(comment.comments), :user => comment.user, :text => comment.text}
}
end
然后调用它来获取整棵树(有一些条件)
render :json => Comment.get_tree(Comment
.where('announce_id = ?', params[:id])
.where('comment_id is NULL'))
有了这个实现,我现在清楚地看到这个任务不需要辅助宝石。但在当前的实现中,我应该在地图中列出所有评论的属性。有什么方法可以扩展现有对象{:responses => get_tree(comment.comments), :user => comment.user}
吗?我发现 << 用于数组, .update 用于哈希,但后来我发现我不知道地comment
图块内部是什么。它要么是数组,要么是哈希,要么是对象...