Module: Elasticsearch::Model::Adapter::ActiveRecord::Records
- Defined in:
- lib/elasticsearch/model/adapters/active_record.rb
Instance Attribute Summary collapse
Instance Method Summary collapse
-
#load ⇒ Object
Prevent clash with ‘ActiveSupport::Dependencies::Loadable`.
-
#order(*args) ⇒ Object
Intercept call to the ‘order` method, so we can ignore the order from Elasticsearch.
-
#records ⇒ Object
Returns an ‘ActiveRecord::Relation` instance.
Instance Attribute Details
#options ⇒ Object
15 16 17 |
# File 'lib/elasticsearch/model/adapters/active_record.rb', line 15 def @options ||= {} end |
Instance Method Details
#load ⇒ Object
Prevent clash with ‘ActiveSupport::Dependencies::Loadable`
47 48 49 |
# File 'lib/elasticsearch/model/adapters/active_record.rb', line 47 def load records.__send__(:load) end |
#order(*args) ⇒ Object
Intercept call to the ‘order` method, so we can ignore the order from Elasticsearch
53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 |
# File 'lib/elasticsearch/model/adapters/active_record.rb', line 53 def order(*args) sql_records = records.__send__ :order, *args # Redefine the `to_a` method to the original one # sql_records.instance_exec do 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 @records end end sql_records end |
#records ⇒ Object
Returns an ‘ActiveRecord::Relation` instance
21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
# File 'lib/elasticsearch/model/adapters/active_record.rb', line 21 def records sql_records = klass.where(klass.primary_key => ids) sql_records = sql_records.includes(self.[:includes]) if self.[: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 @records.sort_by { |record| hits.index { |hit| hit['_id'].to_s == record.id.to_s } } end if self end sql_records end |