2012-02-10 18 views
4

シナリオ 私は、ユーザーテーブルを持つ投稿でいっぱいのテーブルを持っています。 すべての投稿をフェッチしてユーザーごとにグループ化したいと考えていますが、に1人あたり10人という制限を設定します。アクティブレコードLIMIT within GROUP_BY

class Post < ActiveRecord::Base 
    belongs_to :user 
end 

class User < ActiveRecord::Base 
    has_many :posts 
end 

# I thought this might work but it just grabs the first 10 posts and groups them 
Post.find(:all, :limit=>10).group_by(&:user) 

カスタムSQLを作成する必要がありますか、またはActive Recordでこれを行うことはできますか?

+0

に変換されます。要求するごとに*ユーザーごとではなく、すべてのユーザーに対してフェッチを10に制限します。特定のSQL文が必要な場合は、使用しているRDMBSやMySQLなどでタグ付けすることができます。 – tadman

+0

ありがとう、私はポストにsqlite3タグを追加しました – alenm

+0

私はこれがDB固有ではないと思います。 ActiveRecordはこれを単独で処理できます。私はこれを反映するために私の答えを更新しました。 –

答えて

0

何かが好きですか?

Post.group(:user_id).limit(10) 
+0

私にそれを打つ= P –

+0

これは私がtadmanからのコメントを必要としているのではなく、私が達成しようとしていることをよりよく説明するものではありません。私はactiverecordがこれを行うことができ、任意のカスタムSQLを書くことを避けることができると期待しています – alenm

0
Post.group(:user_id).limit(10) 

group_byクエリメソッドではなく、列挙の方法ではありません。

Post.find(:all, :limit => 10)group_byに渡される前にArrayに変わります。上記のメソッドは、メソッドを連鎖させ、それらを使用する必要があるときにのみArrayに変換します。

ActiveRecordがすべてを処理します。上記の方法は、

+0

私はこれを試しているレールコンソールにあり、私はこれがどのように動作しているのかわかりません。私はハッシュを返そうとしているので、ユーザーごとに最大10件の投稿を表示することができます。 – alenm