distinct(columns, orders)
public
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")
# File activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb, line 1054
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*/, '') }
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