Returns the base model’s ID’s for the relation using the table’s
primary key
Person.ids# SELECT people.id FROM peoplePerson.joins(:companies).ids# SELECT people.id FROM people INNER JOIN companies ON companies.id = people.company_id
# File activerecord/lib/active_record/relation/calculations.rb, line 361
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