diff --git a/activerecord/lib/active_record/relation.rb b/activerecord/lib/active_record/relation.rb index c3599fa85f..a475a19a87 100644 --- a/activerecord/lib/active_record/relation.rb +++ b/activerecord/lib/active_record/relation.rb @@ -626,7 +626,10 @@ def delete_by(*args) # # Post.where(published: true).load # => # def load(&block) - exec_queries(&block) unless loaded? + unless loaded? + @records = exec_queries(&block) + @loaded = true + end self end @@ -809,7 +812,7 @@ def _increment_attribute(attribute, value = 1) def exec_queries(&block) skip_query_cache_if_necessary do - @records = + records = if where_clause.contradiction? [] elsif eager_loading? @@ -826,12 +829,11 @@ def exec_queries(&block) klass.find_by_sql(arel, &block).freeze end - preload_associations(@records) unless skip_preloading_value + preload_associations(records) unless skip_preloading_value - @records.each(&:readonly!) if readonly_value + records.each(&:readonly!) if readonly_value - @loaded = true - @records + records end end diff --git a/activerecord/lib/active_record/relation/record_fetch_warning.rb b/activerecord/lib/active_record/relation/record_fetch_warning.rb index a7d07d23e1..f3a7658549 100644 --- a/activerecord/lib/active_record/relation/record_fetch_warning.rb +++ b/activerecord/lib/active_record/relation/record_fetch_warning.rb @@ -16,10 +16,10 @@ module RecordFetchWarning def exec_queries QueryRegistry.reset - super.tap do + super.tap do |records| if logger && warn_on_records_fetched_greater_than - if @records.length > warn_on_records_fetched_greater_than - logger.warn "Query fetched #{@records.size} #{@klass} records: #{QueryRegistry.queries.join(";")}" + if records.length > warn_on_records_fetched_greater_than + logger.warn "Query fetched #{records.size} #{@klass} records: #{QueryRegistry.queries.join(";")}" end end end