2013-05-29 56 views
0

我有一个多态模型,可以涉及到本身:递归:包括在Rails的

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) 

但是,如果我想从后降,无论多么深的嵌套所有评论什么?这可能吗?

回答

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

+0

感谢您的彻底解答。不幸的是,我们正在使用mysql,但至少知道选项是有限的,这是很好的。 – nullnullnull