2011-07-16 14 views
0

ソースの場合:has_manyのをtraining_commentsリターン0ヌル・カウント

@negative_comments = Source.joins(:comments => [:training_comments]).where("training_comments.category_id = ? and comments.spam = ?", 2, false).select("sources.*, count(comments.id) as ncount").group("comments.source_id") 

私は数える彼らの否定的なコメントでソースをリストにしたいが、私はnegative_comments(training_entriesを持っていない情報源を失うています:has_manyのは

コメントコメント.category_id = 2)。私はこれを達成するためにすべてを試みた。私は左に参加しようとした、私はifnullを試みたが、彼らのどれも働いた。すべてのヘルプは本当に理解されるであろう..私は

ソースをカウントやろうとしている何

ソース1 5

ソース2 0

source3 13

私は何を取得していますと、ソースがカウント

ある

ソース1 5

source3 13

ソーステーブル

id: integer 
name: string 
件の

コメントテーブル

id: integer 
source_id: integer 
spam: boolean 

Training_commentsテーブル

id: integer 
comment_id: integer 
category_id: integer 
+0

データベースの構造について知っておくと便利です。 – feeela

+0

更新された質問 – rOrman

答えて

0

あなたが取得しているゼロための標準的な一致がないときは何も生産しない参加します。 LEFT OUTER JOINのActiveRecordを取得する必要があります。

joins('LEFT OUTER JOIN comments ON comments.source_id = sources.id') 

AFAIK、LEFT OUTER JOINを取得するには、SQLにドロップダウンする必要があります。

+0

3つのテーブルを結合する方法はありますか? – rOrman

+0

@rOrman:別の 'joins'呼び出し(' .joins(:third_table) ')を追加したり、上記の' joins'呼び出し( '.joins ( 'LEFT OUTER ... JOIN third_table ON ...') ')。 –

+0

まだ同じ結果:( – rOrman