Method: ActiveRecord::ConnectionAdapters::PostgreSQLAdapter#distinct
- Defined in:
- lib/active_record/connection_adapters/postgresql_adapter.rb
#distinct(columns, orders) ⇒ Object
Returns a SELECT DISTINCT clause for a given set of columns and a given ORDER BY clause.
PostgreSQL requires the ORDER BY columns in the select list for distinct queries, and requires that the ORDER BY include the distinct column.
distinct("posts.id", "posts.created_at desc")
1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 |
# File 'lib/active_record/connection_adapters/postgresql_adapter.rb', line 1087 def distinct(columns, orders) #:nodoc: return "DISTINCT #{columns}" if orders.empty? # Construct a clean list of column names from the ORDER BY clause, removing # any ASC/DESC modifiers order_columns = orders.collect { |s| s.gsub(/\s+(ASC|DESC)\s*/i, '') } order_columns.delete_if { |c| c.blank? } order_columns = order_columns.zip((0...order_columns.size).to_a).map { |s,i| "#{s} AS alias_#{i}" } "DISTINCT #{columns}, #{order_columns * ', '}" end |