ノンカフェインであなたにやさしい

Ruby,Rails,HTML,CSS,Reactなど

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, ...

これでハッピー