Module: ActiveRecordDistinctOn::DistinctOnQueryMethods

Extended by:
ActiveSupport::Concern
Defined in:
lib/active_record_distinct_on/distinct_on_query_methods.rb

Constant Summary collapse

FROZEN_EMPTY_ARRAY =
[].freeze

Instance Method Summary collapse

Instance Method Details

#distinct_on(*fields) ⇒ Object

Raises:

  • (ArgumentError)


24
25
26
27
# File 'lib/active_record_distinct_on/distinct_on_query_methods.rb', line 24

def distinct_on(*fields)
  raise ArgumentError, 'Call this with at least one field' if fields.empty?
  spawn.distinct_on!(*fields)
end

#distinct_on!(*fields) ⇒ Object



29
30
31
32
33
34
35
36
37
38
39
40
# File 'lib/active_record_distinct_on/distinct_on_query_methods.rb', line 29

def distinct_on!(*fields)
  fields.flatten!
  fields.map! { |field|
    if klass.attribute_alias?(field)
      arel_table[klass.attribute_alias(field).to_sym]
    else
      arel_table[field]
    end
  }
  self.distinct_on_values += fields
  self
end

#distinct_on_valuesObject



16
17
18
# File 'lib/active_record_distinct_on/distinct_on_query_methods.rb', line 16

def distinct_on_values
  @values[:distinct_on] || FROZEN_EMPTY_ARRAY
end

#distinct_on_values=(values) ⇒ Object



20
21
22
# File 'lib/active_record_distinct_on/distinct_on_query_methods.rb', line 20

def distinct_on_values=(values)
  @values[:distinct_on] = values
end