2011-01-20 8 views
3

私はカテゴリや投稿のようなモデルを持っているレール3アプリを持っています。最新のオブジェクトをhas_many関係で読み込むにはどうしたらいいですか?

カテゴリー

にhas_many:投稿

ポスト

belongs_toの:カテゴリ

私はループせずに横に記載されている最新のポストでのカテゴリの一覧を表示できるようにしたいですカテゴリごとにデータベースにアクセスし、カテゴリごとに1つのポストだけを取り戻すことができます。

私は同じ質問をポーズしたいと思います - SQL join: selecting the last records in a one-to-many relationship - うまくいけばアクティブレコードを使用しています。

これはばかげたことですか?私はちょうどそれらをロードする熱心にカテゴリのすべての投稿を取り戻す必要がありますか?私はパフォーマンスを心配していたので、これを研究し始めたのです。

答えて

3

自分でクエリを作成せずにこれが可能かどうかはわかりません。これの問題は、すべての条件付き取得を開始したり、結果を制限しようとすると、レールが積極的なローディングを処理する方法があまり良くないことです。

class Category < ActiveRecord::Base 
    has_one :last_post, :class_name => "Post", :foreign_key => "category_id", :order => "created_at desc" 
end 

次にあなたが使用することができ、通常は含まれています:、これで問題は、SQLのこれが発生していることで、

Category.includes(:last_post).all 

しかし、あなたはほとんどあなたが別の関連付けを作成することによって、やりたい含ませることができますcategory.last_postを呼び出すと最後の投稿のみが返されますが、カテゴリのすべての投稿を選択しています。それはこのようなSQLを生成します:

SELECT `categories`.* FROM `categories` 
SELECT `posts`.* FROM `posts` WHERE (`posts`.category_id IN (1,2)) ORDER BY created_at desc 
+0

あなたの意見では、ちょうどこのようなことのクエリを構築する方が良いですか? – someoneinomaha

関連する問題