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)

コメントユーザーを取得することは可能ですか?私はたくさんの投稿とコメントを挙げています。私は各コメントユーザーに質問したくありません。

Thx /トビアス

8

2 答え

試す

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

Read more about it here

26
追加された
レール4と同じものを含み、私も5で考える
追加された 著者 cristian,
私の答えは:投稿has_many:コメント、include => [:user]、:limit => 5
追加された 著者 clyfe,
誰もがこれがRails 4と5でどう変わったのか知っていますか?私はこれがどのように変わったのかに関する情報を見つけることができず、私はこれをやめて3.2から5.0への私のアプリのアップグレード
追加された 著者 shigazaru,
このクエリでコメントを制限することは可能ですか?私は5つの最新のコメントを含めるだけです。 shout.comments.limit(5)をループすると、新しいクエリが実行されます
追加された 著者 sandelius,
うん、しかし、私はまた、1つのページにすべてのコメントを取得したり、それらを改ページしてwan'tしないでください?
追加された 著者 sandelius,

リレーション定義文にインクルードはどうですか?

:include
      このオブジェクトがロードされたときに読み込まれるべき二次の関連付けを指定します。

class Post <
  belongs_to :user
  has_many :comments, :include => [:user], :limit => 5
end
10
追加された
それは次のように見えます:includeは有効なオプションではありません(少なくともRails 4.1ではない)、代替手段はありますか?
追加された 著者 FeifanZ,
@FeifanZそれは includes でなければなりません。それはうまくいくはずです
追加された 著者 ahnbizcad,