Module: DistinctDistinctPatch

Included in:
ActiveRecord::Relation
Defined in:
lib/distinct_distinct_patch.rb

Instance Method Summary collapse

Instance Method Details

#construct_limited_ids_condition(relation) ⇒ Object



4
5
6
7
8
9
10
11
12
13
14
15
# File 'lib/distinct_distinct_patch.rb', line 4

def construct_limited_ids_condition(relation)
  orders = relation.order_values.map { |val| val.presence }.compact
  values = @klass.connection.distinct("#{@klass.connection.quote_table_name table_name}.#{primary_key}", orders)

  relation = relation.dup.select(values)
  relation.uniq_value = nil

  id_rows = @klass.connection.select_all(relation.arel, 'SQL', relation.bind_values)
  ids_array = id_rows.map {|row| row[primary_key]}

  ids_array.empty? ? raise(ActiveRecord::ThrowResult) : table[primary_key].in(ids_array)
end