提交 847643a5 编写于 作者: E eileencodes

Move records and loaded ivar up to load

We should set the `@records` and `@loaded` ivar inside `#load` rather
than in `#exec_queries`. Since `#load` is running `#exec_queries` and
`@records` can only be assigned if `loaded?` is true and `@loaded` can
only be set if `loaded?` is true then `#load` should do the assignment.
This is cleaner but also we came across this while working on an
internal gem and realized that the ivar assignment was happening in the
wrong place.
Co-authored-by: NAaron Patterson <aaron.patterson@gmail.com>
上级 19c5bd38
......@@ -626,7 +626,10 @@ def delete_by(*args)
#
# Post.where(published: true).load # => #<ActiveRecord::Relation>
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
......
......@@ -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
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册