Module: Elasticsearch::Model::Adapter::ActiveRecord::Records

Defined in:
lib/elasticsearch/model/adapters/active_record.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Instance Attribute Details

#optionsObject



32
33
34
# File 'lib/elasticsearch/model/adapters/active_record.rb', line 32

def options
  @options ||= {}
end

Instance Method Details

#loadObject

Prevent clash with ‘ActiveSupport::Dependencies::Loadable`



68
69
70
# File 'lib/elasticsearch/model/adapters/active_record.rb', line 68

def load
  records.__send__(:load)
end

#recordsObject

Returns an ‘ActiveRecord::Relation` instance



38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
# File 'lib/elasticsearch/model/adapters/active_record.rb', line 38

def records
  sql_records = klass.where(klass.primary_key => ids)
  sql_records = sql_records.includes(self.options[:includes]) if self.options[:includes]

  # Re-order records based on the order from Elasticsearch hits
  # by redefining `to_a`, unless the user has called `order()`
  #
  sql_records.instance_exec(response.response['hits']['hits']) do |hits|
    ar_records_method_name = :to_a
    ar_records_method_name = :records if defined?(::ActiveRecord) && ::ActiveRecord::VERSION::MAJOR >= 5

    define_singleton_method(ar_records_method_name) do
      if defined?(::ActiveRecord) && ::ActiveRecord::VERSION::MAJOR >= 4
        self.load
      else
        self.__send__(:exec_queries)
      end
      if !self.order_values.present?
        @records.sort_by { |record| hits.index { |hit| hit['_id'].to_s == record.id.to_s } }
      else
        @records
      end
    end if self
  end

  sql_records
end