2011-12-18 12 views
8

特定のユーザーからのすべての投稿を照会し、すべてのコメントとそのコメントに属するユーザーを含める必要があります。Railsにネストされたリレーションが含まれています

class User < ... 
    has_many :posts 
    has_many :comments 
end 

class Post < ... 
    belongs_to :user 
    has_many :comments 
end 

class Comment < ... 
    belongs_to :user 
    belongs_to :post 
end 

@posts = current_user.posts.include(:comments) 

コメントを入力することもできます。私はたくさんの投稿とコメントを挙げています。私は各コメントユーザーに質問したくありません。

@posts = current_user.posts.includes(:comments => :user) 

はそれについての詳細を読む試し/トビアス

答えて

26

Thxをhereについては、関係定義文で含める方法

+1

このクエリでは、コメントを制限することはできますか。私は5つの最新のコメントを含めるだけです。私がshout.comments.limit(5)をループすると、新しいクエリが実行されます – sandelius

+1

私の答えでは: '投稿has_many:コメント、:include => [:user]、:limit => 5' – clyfe

+0

ええ、でも私もwan't 1つのページにすべてのコメントを取り込むか、ページを改ページすることができますか? – sandelius

10

は:
は、このオブジェクトがロードされたときに熱心にロードされるべき二次アソシエーションを指定含まれています。

class Post < 
    belongs_to :user 
    has_many :comments, :include => [:user], :limit => 5 
end 
+1

それは見えます: (少なくともRails 4.1ではなく)有効なオプションですが、代わりの方法はありますか? – FeifanZ

+0

@FeifanZそれは '含む'であるべきです。それはうまくいくはずです – ahnbizcad

関連する問題