pluck(:id) を使っていたのでメモ程度に。
動作環境
$ bin/rails -v Rails 7.1.2
実例
Authorというモデルがあった場合、以下のように取得できる
Author.ids # => [1, 2, 3] Author Ids (0.6ms) SELECT `authors`.`id` FROM `authors` # => Array
こちらはModel側で主キーを別のものに指定している場合でもよしなに該当カラムを引き当ててくれるので、その点ではpluck(:id)よりも親切
実コード
実際のコードは以下の通り、再帰的なことをやっているのでわかりにくいが primary_key を使って取得している
def ids primary_key_array = Array(primary_key) if loaded? result = records.map do |record| if primary_key_array.one? record._read_attribute(primary_key_array.first) else primary_key_array.map { |column| record._read_attribute(column) } end end return @async ? Promise::Complete.new(result) : result end if has_include?(primary_key) relation = apply_join_dependency.group(*primary_key_array) return relation.ids end columns = arel_columns(primary_key_array) relation = spawn relation.select_values = columns result = if relation.where_clause.contradiction? ActiveRecord::Result.empty else skip_query_cache_if_necessary do klass.connection.select_all(relation, "#{klass.name} Ids", async: @async) end end result.then { |result| type_cast_pluck_values(result, columns) } end