0

犬を飼っているユーザーを数えようとしています。

User.joins(:pets).where("pets.type = ?", :dog).count

これは、ユーザーとその犬を組み合わせた数を返します。代わりに、実際のユーザーの数が必要です。

私は何を間違っていますか?

アップデート

また、上記のクエリを使用してユーザーをフェッチしようとしましたが、犬の数に応じて、同じユーザーの配列が複数回繰り返されて返されます。

4

2 に答える 2

1

これを試して:

User.joins(:pets).where("pets.type = ?", :dog).count(distinct: true)

API ドキュメントを参照してください。

于 2012-10-25T09:52:03.607 に答える
0

結合は、ユーザーが複数の関連付けを持っているすべての重複行を返します...

たとえば、ユーザー U1 が 1 匹の犬を飼っていて、ユーザー U2 が 2 匹の犬を飼っている場合、合計 3 行が結合によって返されます....したがって、結合を使用する代わりに、includes オプションを使用してみてください...

詳細については、このRailscast、http: //railscasts.com/episodes/181-include-vs-joinsを参照してください...

于 2012-10-25T09:52:06.450 に答える