日付フィールドを含むレコード セットがあり、そのレコード セットに含まれる一意の日付の数を確認したいと考えています。
何かのようなもの:
Record.find(:all).date.unique.count
もちろん、それはうまくいかないようです。
日付フィールドを含むレコード セットがあり、そのレコード セットに含まれる一意の日付の数を確認したいと考えています。
何かのようなもの:
Record.find(:all).date.unique.count
もちろん、それはうまくいかないようです。
あなたがしようとしているのは、次のSQLです。
SELECT COUNT(DISTINCT date) FROM records
ActiveRecordにはこれが組み込まれています:
Record.count('date', :distinct => true)
答えの詳細:
Post.create(:user_id => 1, :created_on => '2010-09-29')
Post.create(:user_id => 1, :created_on => '2010-09-29')
Post.create(:user_id => 2, :created_on => '2010-09-29')
Post.create(:user_id => null, :created_on => '2010-09-29')
Post.group(:created_on).count
# => {'2010-09-29' => 4}
Post.group(:created_on).count(:user_id)
# => {'2010-09-29' => 3}
Post.group(:created_on).count(:user_id, :distinct => true) # Rails <= 3
Post.group(:created_on).distinct.count(:user_id) # Rails = 4
# => {'2010-09-29' => 2}
また、データベースのフィールドにインデックスがあることを確認してください。そうしないと、クエリがすぐに遅くなります。
(SQL でこれを行う方がはるかに優れています。そうしないと、カウントに答えるためだけに db テーブル全体をメモリにプルします。)