属性ごとに限られた数のレコードをフェッチする方法はありますか?たとえば、author_id
という属性のモデルPost
がある場合は、すべての投稿を取得したいのですが、著者ごとに最大10個を取得しますか?Railsアクティブレコード、属性ごとの制限
ありがとうございます!
属性ごとに限られた数のレコードをフェッチする方法はありますか?たとえば、author_id
という属性のモデルPost
がある場合は、すべての投稿を取得したいのですが、著者ごとに最大10個を取得しますか?Railsアクティブレコード、属性ごとの制限
ありがとうございます!
limit
メソッドを使用できます。 User.limit(10)
同様
は、これは非常に純粋なARソリューションではありません10人のユーザ
を取得取得しますので、あなたのパフォーマンスは変更される場合があります:
Post.all.pluck(:author_id).uniq.map do |author_id|
Post.where(author_id: author_id).limit(10)
end.flatten
これは、さらにいくつかのカスタムSQLクエリを記述することによって最適化できるが、それはありますすべて私は現時点で思いつくことができます。
あなたの著者には多くの投稿があると仮定しています&投稿は著者に帰属します。 次に、必要なコードは次のようになります。
authors = Author.joins(:posts)
authors.includes(:posts).each do |author|
author.post.limit(10)
end