找到一个父级的多态树的方式

时间:2010-10-23 06:31:32

标签: ruby-on-rails ruby-on-rails-3 polymorphic-associations arel

我有一个简单的多态关联

#comment.rb
belongs_to :commentable, :polymorphic => true
has_many :comments, :as => :commentable
#post.rb
has_many  :comments, :as => :commentable                                        
accepts_nested_attributes_for :comments, :allow_destroy => true

所以在IRB中我可以做,Post.comments或Comment.comments。

但我怎样才能找到父帖?

与Comment.post一样?

我现在可以通过一系列.commentable来完成他们的工作。例如:

Comment.find(1).commentable.commentable
=> Post(:id => ...

1 个答案:

答案 0 :(得分:1)

你可以上去,例如:

class Comment < ActiveRecord::Base
    def parent_post
      c = self
      c = c.commentable while c.is_a?(Comment)
      c
    end
end

但是如果它们是深层嵌套的(n db查询),那么它会非常慢。 如果您需要演出,我建议您只需将parent_post_id与评论存储起来。