递归:包含在Rails中

时间:2013-05-29 21:01:54

标签: ruby-on-rails include polymorphism

我有一个可以与自身相关的多态模型:

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)

但是,如果我想从帖子中获取所有评论,无论嵌套有多深,该怎么办?这可能吗?

1 个答案:

答案 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中实现。