From b93d09dbc59b3b85e7208cd57c92be9d86fd51df Mon Sep 17 00:00:00 2001 From: Aaron Patterson Date: Tue, 24 Sep 2013 11:28:28 -0700 Subject: push preloaded test up to the factory method so we can eliminate conditionals from the individual preloaded classes --- .../lib/active_record/associations/preloader.rb | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) (limited to 'activerecord/lib/active_record/associations/preloader.rb') diff --git a/activerecord/lib/active_record/associations/preloader.rb b/activerecord/lib/active_record/associations/preloader.rb index b99ae35809..8a975468f2 100644 --- a/activerecord/lib/active_record/associations/preloader.rb +++ b/activerecord/lib/active_record/associations/preloader.rb @@ -133,7 +133,7 @@ module ActiveRecord def preloaders_for_one(association, records, scope) grouped_records(association, records).flat_map do |reflection, klasses| klasses.map do |rhs_klass, rs| - loader = preloader_for(reflection).new(rhs_klass, rs, reflection, scope) + loader = preloader_for(reflection, rs).new(rhs_klass, rs, reflection, scope) loader.run self loader end @@ -173,7 +173,22 @@ module ActiveRecord end end - def preloader_for(reflection) + class NullPreloader + attr_reader :owners + + def initialize(klass, owners, reflection, preload_scope) + @owners = owners + end + + def run(preloader); end + def loaded?; false; end + end + + def preloader_for(reflection, owners) + if owners.first.association(reflection.name).loaded? + return NullPreloader + end + case reflection.macro when :has_many reflection.options[:through] ? HasManyThrough : HasMany -- cgit v1.2.3