Rails ActiveRecordで特定のカラムのユニークな配列を取得する
例えば created_on
に日付が入っているこんなデータ
Post.last Post Load (13.1ms) SELECT "posts".* FROM "posts" => #<Post id: 1, user_id: 1, created_on: "2020-11-02">
pluck
を使うだけだと同じ日付が入ってしまう
Post.pluck(:created_on) (2.7ms) SELECT "posts"."created_on" FROM "posts" => [Mon, 02 Nov 2020, Mon, 02 Nov 2020, ...]
uniq
すると一意の日付だけになる
Post.pluck(:created_on).uniq (2.7ms) SELECT "posts"."created_on" FROM "posts" => [Mon, 02 Nov 2020, Tue, 03 Nov 2020, Sat, 26 Sep 2020,
このままでもいいが posts
のレコード数が多すぎるとその分の配列を uniq
することになるのでアプリケーション側に負荷がかかる可能性があるのでDB側にやらせる
select
distinct
を使う
Post.select(:created_on).distinct.pluck(:created_on) (2.0ms) SELECT DISTINCT "posts"."created_on" FROM "posts" => [Tue, 01 Sep 2020, Wed, 02 Sep 2020, Thu, 03 Sep 2020, Fri, 04 Sep 2020, ...
これでハッピー