2011-07-15 41 views
1

私はアプリケーション内で多形関連を通じてacts_as_commentableを使用しており、コメントをスレッド化できるようにしたいと考えました。私はこれが働いているが、今は構造のようなツリーを返し、N + 1のクエリの問題を避けるindexアクションを作成したい。私が持っている:Eager Loading自己参照多型協会

SELECT "comments".* FROM "comments" WHERE ("comments".commentable_id = 22 AND "comments".commentable_type = 'Item') 

これはポリモーフィックな関連を自己参照上で実行するために取得する方法:

item.comments.includes(:comments) 

しかし、それはどんな積極的なロードを行いません。次のクエリを実行しますか?

答えて

3

belongs_toの関連付けが2つある場合は、コメントをコメント可能にするのではなく、Commentにすると簡単です。 1つは元のコメント可能なもの、もう1つはスレッドの親コメントのものです。

class Comment < ActiveRecord::Base 
    belongs_to :commentable, polymorphic: true 
    belongs_to :parent, class_name: Comment 
    has_many :replies, class_name: Comment, inverse_of: :parent, include: :replies 
    … 
end