Sha256: 99374fa23a20a1f5bf307a22581ecff3a605d0de228d07ed5ee8ad14a5839b1e

Contents?: true

Size: 1.03 KB

Versions: 4

Compression:

Stored size: 1.03 KB

Contents

require 'active_record'
require 'active_record/relation'
require 'active_record/querying'
require 'active_record/relation/query_methods'

module ActiveRecord::QueryMethods
  def distinct_on_values
    @values["distinct_on_values"] || []
  end

  def distinct_on_values=(value)
    @values["distinct_on_values"] = value
  end

  def distinct_on(*fields)
    spawn.distinct_on!(*fields)
  end
  alias uniq_on distinct_on

  def distinct_on!(*fields)
    fields.flatten!
    self.distinct_on_values = fields.map { |x| x.is_a?(Arel::Attributes::Attribute) ? x : klass.arel_table[x] }
    self
  end
  alias uniq_on! distinct_on!

  def build_arel_with_distinct_on(aliases = nil)
    arel = build_arel_without_distinct_on(aliases)
    arel.distinct_on(self.distinct_on_values) if !self.distinct_on_values.empty?
    arel
  end
  alias_method :build_arel_without_distinct_on, :build_arel
  alias_method :build_arel, :build_arel_with_distinct_on
end

ActiveRecord::Querying.delegate :distinct_on, to: :all
ActiveRecord::Querying.delegate :distinct_on!, to: :all

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
arel-extensions-7.0.3 lib/active_record/query_methods.rb
arel-extensions-7.0.2 lib/active_record/query_methods.rb
arel-extensions-7.0.1 lib/active_record/query_methods.rb
arel-extensions-7.0.0 lib/active_record/query_methods.rb