Sha256: 5896af5bcd30b08732df27ab30156b662e026673286f55910dd359897a5736c0

Contents?: true

Size: 735 Bytes

Versions: 10

Compression:

Stored size: 735 Bytes

Contents

module ActiveRecord
  class Relation

    alias :original_count :count

    def count(column_name = nil, options = {})
      if !loaded? && (column_name == :all) && (options == {})
        associations = klass.reflections.keys.collect(&:to_s)

        contains_possible_paths = qry_options.any? do |key, value|
          if value.is_a?(Array)
            value.any? do |val|
              val.to_s.scan(/(?:^|[^\.])([a-z_]+)\.[a-z_]+/).flatten.any? do |string|
                associations.include?(string)
              end
            end
          end
        end

        if contains_possible_paths
          return qry("COUNT(DISTINCT id)")[0][0]
        end
      end
      original_count column_name, options
    end

  end
end

Version data entries

10 entries across 10 versions & 1 rubygems

Version Path
directiverecord-0.1.32 lib/directive_record/gem_ext/active_record/relation/count.rb
directiverecord-0.1.31 lib/directive_record/gem_ext/active_record/relation/count.rb
directiverecord-0.1.30 lib/directive_record/gem_ext/active_record/relation/count.rb
directiverecord-0.1.29 lib/directive_record/gem_ext/active_record/relation/count.rb
directiverecord-0.1.28 lib/directive_record/gem_ext/active_record/relation/count.rb
directiverecord-0.1.27 lib/directive_record/gem_ext/active_record/relation/count.rb
directiverecord-0.1.26 lib/directive_record/gem_ext/active_record/relation/count.rb
directiverecord-0.1.25 lib/directive_record/gem_ext/active_record/relation/count.rb
directiverecord-0.1.24 lib/directive_record/gem_ext/active_record/relation/count.rb
directiverecord-0.1.23 lib/directive_record/gem_ext/active_record/relation/count.rb