1

次の AR 関連付けがあります。

Category :has_many :posts
Category :has_many :authors, :through => :posts
Post :belongs_to :author
Post :has_many :comments

私の見解では、私の目標は、投稿ごとにコメントをリストし、特定のカテゴリの作成者ごとに投稿をリストすることです。私のクエリの試みは次のようになります。熱心な読み込みにインクルードを使用します。

category = Category.first
category.authors.includes(:posts => comments)

ビューリストを次のようにしたいと思います:

author1
  post1
    comment1
  post2
    comment2
author2
  post3
    comment3

ただし、ActiveRecord::Relation オブジェクトを繰り返し処理しようとすると、最初のレベルの作成者に重複があり、サイズが投稿のサイズに等しいことに気付きました。最初のレベルで重複していない作成者を取得し、関連する投稿とそのコメントを反復処理できる方法はありますか?

私が考えた別の方法は、ActiveRecord::Relation オブジェクトを反復処理し、それをハッシュとして書き直すことでしたが、最初にこれを行う AR の方法があるかどうかを確認したかったのです。

4

1 に答える 1

0

1 つの方法は、リレーションに :unique プロパティを設定することです。

  Category :has_many :authors, :through => :posts, :uniq => true

したがって、category.authors は常に作成者のセットを返します。

チェックアウト:レールガイド - アクティブレコード

于 2012-04-21T09:30:40.087 に答える