提交 ec7cc6aa 编写于 作者: A Aaron Patterson

access preloaders independently of model mutations

上级 31744e41
......@@ -86,24 +86,29 @@ def initialize(records, associations, preload_scope = nil)
@records = Array.wrap(records).compact.uniq
@associations = Array.wrap(associations)
@preload_scope = preload_scope || NULL_RELATION
@preloaders = nil
end
NULL_RELATION = Struct.new(:values).new({})
def run
run_preload associations, records
preloaders.each(&:run)
end
private
def preloaders
return @preloaders if @preloaders
def run_preload(associations, records)
unless records.empty?
associations.flat_map { |association|
if records.empty?
@preloaders = []
else
@preloaders = associations.flat_map { |association|
preload(association, records)
}.each(&:run)
}
end
end
private
def preload(association, records)
case association
when Hash
......@@ -123,12 +128,7 @@ def preloaders_for_hash(association, records)
loaders = preloaders_for_one parent, records
recs = loaders.flat_map(&:target_records).uniq
lls = Array.wrap(child).flat_map { |assoc| preload assoc, recs }
loaders + lls
end
def preload_hash(association, records)
preloaders_for_hash(association, records).each(&:run)
loaders.concat Array.wrap(child).flat_map { |assoc| preload assoc, recs }
end
# Not all records have the same class, so group then preload group on the reflection
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册