Method: ActiveRecord::ConnectionAdapters::SchemaStatements#distinct_relation_for_primary_key
- Defined in:
- activerecord/lib/active_record/connection_adapters/abstract/schema_statements.rb
#distinct_relation_for_primary_key(relation) ⇒ Object
:nodoc:
1429 1430 1431 1432 1433 1434 1435 1436 1437 1438 1439 1440 1441 1442 1443 1444 1445 1446 1447 1448 1449 1450 1451 1452 |
# File 'activerecord/lib/active_record/connection_adapters/abstract/schema_statements.rb', line 1429 def distinct_relation_for_primary_key(relation) # :nodoc: primary_key_columns = Array(relation.primary_key).map do |column| visitor.compile(relation.table[column]) end values = columns_for_distinct( primary_key_columns, relation.order_values ) limited = relation.reselect(values).distinct! limited_ids = select_rows(limited.arel, "SQL").map do |results| results.last(Array(relation.primary_key).length) # ignores order values for MySQL and PostgreSQL end if limited_ids.empty? relation.none! else relation.where!(**Array(relation.primary_key).zip(limited_ids.transpose).to_h) end relation.limit_value = relation.offset_value = nil relation end |