rails で別名がつけられているカラムを pluck で取得する方法を備忘録として残しておく

方法

シンボルでの指定ではなく、文字列で as 句含めて指定する

環境

  • rails: 6.1.6.1

実際のコード

例. Book と Category クラスの関係が 1 対 多 である場合

# Book クラス
class Book < ApplicationRecord
  has_many :categories
end

# Category クラス
class Category < ApplicationRecord
  belongs_to :book
end

# データ準備
book = Book.create!(name: 'サンプル書籍')
book.categories << Category.create(name: 'ビジネス')
book.categories << Category.create(name: '自己啓発')

# 別名を付与したカラムを取得
category_names = Book.joins(:categories)
                     .select(:name, 'categories.name as category_name')
                     .where(id: 1)
                     .pluck('categories.name as category_name')

# (1.2ms)  SELECT categories.name as category_name FROM "books" INNER JOIN "categories" ON "categories"."book_id" = "books"."id" WHERE "books"."id" = $1  [["id", 1]]
#=> ["ビジネス", "自己啓発"]

# 別テーブルの同名カラムも可能
category_names = Book.joins(:categories)
                     .select(:name, 'categories.name as category_name')
                     .where(id: 1)
                     .pluck(:name, 'categories.name as category_name')

# (1.0ms)  SELECT "books"."name", categories.name as category_name FROM "books" INNER JOIN "categories" ON "categories"."book_id" = "books"."id" WHERE "books"."id" = $1  [["id", 1]]
#=> [["サンプル書籍", "ビジネス"], ["サンプル書籍", "自己啓発"]]