2009-06-16 17 views
0

私はモデルhas_many:commentsを持っています。コメントのある投稿のみを表示するにはどうすればよいですか?アソシエーションのActiveRecord条件(Rails)

私はnamed_scopeにいくらか慣れていますが、Post.comments(またはself.comments)をシンボルを必要とする:conditionsハッシュにどのように置くことができるのか分かりません。

class Post < ActiveRecord::Base 
    has_many :comments 
    named_scope :with_comments, :conditions => [#self.comments.length > 0] 
end 

コメント欄には何を書きますか?

ありがとうございます!

答えて

1

を選択して確認して、ちょうどあなたのコメントテーブルに対して参加することができるはずです。

class Comment < AR:Base 
    belongs_to :post, :counter_cache => true 
end 

次に、2つではなく1つのクエリを実行するだけです。

Post.find(:all, :conditions => ["counter_cache > 0"])

+0

+1:はるかに効率的ですジョインをするよりも。 –

2

あなたは明確な行より良いポストにcounter_cacheを置くかもしれない

named_scope :with_comments, :joins => :comments, :select => 'DISTINCT posts.*' 
+0

素晴らしいと思います。私が手動で属性名を入力できるようにするには、どのように引数を渡すことができますか。私の投稿テーブルにはpostidというpkがあり、コメントテーブルにはpost_idというfkがあります。私は手作業でpksとfksを関連付けに設定する方法を知っていますが、named_scopeを使ってどのようにすればいいですか?もう一度ありがとう、これは本当に品質の応答です。 – user94154

+0

:joinsオプションを必要なjoinに置き換えてください。:joins => 'INNER JOIN "コメント" ON comments.post_id = posts.postid' – slillibri

+0

Railsでは ':joins'はデフォルトで' INNER JOIN'を使用します –

関連する問題