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]]
#=> [["サンプル書籍", "ビジネス"], ["サンプル書籍", "自己啓発"]]