フィールドが特定の値と等しくない結果に対してカウントを実行しようとしていますが、常に結果が返されません。
たとえば、CompanyとProductsが1 対多の関係にあると仮定すると、クエリを実行して ActiveRecord から次の配列を取得できますCompany.find(63).products
(これは SQL で に相当しますSELECT "products".* FROM "products" WHERE "products"."company_id" = 63;
)。
<Product id: 1, company_id: 63, foo_id: 1>,
<Product id: 2, company_id: 63, foo_id: 3>,
<Product id: 3, company_id: 63, foo_id: nil>,
<Product id: 4, company_id: 63, foo_id: nil>
ただし、上記のクエリを拡張して、最初のレコード以外のすべてをカウントしようとすると、次のようになります。
Company.find(63).products.where("foo_id != ?", 1).count
SQLでは次のとおりです。
SELECT COUNT(*) FROM "products" WHERE "products"."company_id" = 63 AND (foo_id != 1)
3が表示されると予想すると、結果として常に1が返されるようです。なぜこれが起こっているのですか?どうすれば正しくカウントできますか?