我有一个可以与自身相关的多态模型:
class Comment < ActiveRecord::Base
belongs_to :commentable, polymorphic: true
has_many :comments, as: :commentable
end
这些关系完美无缺,除非我试图通过include
语句调用完整的子/父评论树:
Post.find(1).include(:comments)
这仅包括与帖子直接相关的评论。我也许可以通过以下方式检索第二级:
Post.find(1).include(comments: :comments)
但是,如果我想从帖子中获取所有评论,无论嵌套有多深,该怎么办?这可能吗?
答案 0 :(得分:2)
您似乎想要检索邻接列表。 Rails没有立即支持它,但如果你使用postgresql,你可以使用“WITH RECURSIVE”运算符。
该插件会处理它:https://github.com/chrisroberts/acts_as_sane_tree
否则,您可以非常轻松地创建自己的postgresql函数(在迁移中声明它),然后在查询中使用它。看看:http://wiki.postgresql.org/wiki/Getting_list_of_all_children_from_adjacency_tree
WITH RECURSIVE目前尚未在mysql或sqlite3中实现。