2011-07-28 14 views
2

が言う多くの関係を持つレコードを選択するには、これを持っている:ActiveRecordのクエリ:中有する少なくとも1つが、

class Question < ActiveRecord::Base 
has_many :answers 
end 

class Answer < ActiveRecord::Base 
belongs_to :question 
end 

どのように私は、重複する質問を取得せずに答えを持っているすべての質問を検索していますか?

は、あなたがこれを行う場合の質問は、2つの答えを持って言う:

Question.joins(:answers) 

それは内部結合であるので、あなたが質問を複数回取得します。

raw SQLを別にする必要はなく、クエリインターフェイスでこれを行う方法はありますか?

答えて

2

私はちょうどカウンタキャッシュ列を使用します。これは、あなたに付属の回答の数を数えるquestionsのデータベース列を与えます。ボーナスとして、おそらくこのクエリを実行する方が速いでしょう。ここで

は1を作成する方法について説明しRailscastsのビデオだ:http://railscasts.com/episodes/23-counter-cache-column

次に、あなたのクエリは次のようになります。

Question.where("answers_count > 0") 

あなたも派手なこととスコープとしてこれを定義することができます。

class Question < ActiveRecord::Base 
    has_many :answers 
    scope :answered, where("answers_count > 0") 
end 

それは簡単な解決策のようですが、単純ですが良いです。

+0

素晴らしいと簡単な修正です! – earnold

1

これは動作するはずです:

Question.joins(:answers).uniq 
関連する問題