2011-11-06 15 views
5

これは単純なクエリのようだが、私はそれを釘付けできない。熱心なローディング・アソシエーションだがリミット・リターン

基本的には、ポストを持つカテゴリの古い概念に変わりはありません。ポストがカテゴリに属している間は、期待される関連付けが行われ、カテゴリはhas_many投稿となります。

私はすべてのアイデアを自分の投稿ですべてのカテゴリを取得するが、10

にポストの数を制限したいですか?

答えて

1

これは、LIMITがデータセット全体のサイズにあるため、生のSQLで行うことはできません。

純粋にSQLでこれを行う唯一の方法は、結合とフィルタに偽のID列を作成することです。これは、実装上の問題が使用しているデータベースサーバーに非常に依存するものです。

代替案は、すべてのカテゴリと投稿を取得し、レコードセットを削減するか、すべてのカテゴリを取得して、Joergが示唆するように反復して10の投稿を取得します。

0

これらをすべて1つのSQL文で取得する必要がありますか?それとも、必要なときにそれらを読み込むのは大丈夫ですか?

が、その場合には

Category.all 

すべてのカテゴリを取得します、そしてあなたの投稿は単に

Category.all.each do |category| 
    category.posts.limit(10) 
end 

、これは十分ではないでしょう可能性があり得るためにそれらを介してステッピング?

+0

私はN + 1問合せを避けようとしていますが、それは現在どのように動作しているのですか?1つの問合せで実行できると思われるときに多くの問合せが実行されます。 –

+0

残念ながらそれは可能ではないと思います.Neil氏のように、データセット全体に制限が適用されています。サブクエリのポストを制限付きで収集するSQL文(DBとバージョンに応じて)を作成することも可能ですが、可読性の面で問題が生じる可能性があります。私はまた、1つのデータセット内のすべてのデータを取得することを推奨していませんし、Rubyでそれを自分の必要条件に合わせることで、それぞれのオブジェクトとして大量のパフォーマンスが低下し、不必要なオブジェクトがたくさんインスタンス化される必要があります。 – Joerg

関連する問題