<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array"/>
  <modified type="array">
    <modified>
      <diff>@@ -10,6 +10,8 @@ module ActiveRecord
       # preload_options is passed only one level deep: don't pass to the child associations when associations is a Hash
       protected
       def preload_associations(records, associations, preload_options={})
+        logger.debug(&quot;!!!!!!!!!!!!!!!!!!!! ACC preload_associations in class #{self.name}&quot;)
+        logger.debug(&quot;associations: #{associations.inspect}&quot;)
         records = [records].flatten.compact.uniq
         return if records.empty?
         case associations
@@ -22,7 +24,10 @@ module ActiveRecord
             reflection = reflections[parent]
             parents = records.map {|record| record.send(reflection.name)}.flatten
             unless parents.empty? || parents.first.nil?
-              parents.first.class.preload_associations(parents, child)
+              class_to_reflection = {}
+              parents.group_by(&amp;:class).each do |parent_class, grouped_parents|
+                parent_class.preload_associations(grouped_parents,child)
+              end
             end
           end
         end
@@ -36,7 +41,7 @@ module ActiveRecord
         # group on the reflection itself so that if various subclass share the same association then we do not split them
         # unncessarily
         records.group_by {|record| class_to_reflection[record.class] ||= record.class.reflections[association]}.each do |reflection, records|
-          raise ConfigurationError, &quot;Association named '#{ association }' was not found; perhaps you misspelled it?&quot; unless reflection
+          raise ConfigurationError, &quot;Association named \'#{ association }\' was not found; perhaps you misspelled it?&quot; unless reflection
           send(&quot;preload_#{reflection.macro}_association&quot;, records, reflection, preload_options)
         end
       end
@@ -58,6 +63,7 @@ module ActiveRecord
       end
 
       def set_association_collection_records(id_to_record_map, reflection_name, associated_records, key)
+        logger.debug(&quot;!!!!!!!!!!!!!!!!!!!! ACC set_association_collection_records #{reflection_name} #{key}&quot;)
         associated_records.each do |associated_record|
           mapped_records = id_to_record_map[associated_record[key].to_s]
           add_preloaded_records_to_collection(mapped_records, reflection_name, associated_record)
@@ -181,6 +187,7 @@ module ActiveRecord
           end
           through_records.flatten!
         else
+          logger.debug(&quot;!!!!!!!!!!!!!!!!!!!! ACC preload_associations using #{records.first.class.name}&quot;)
           records.first.class.preload_associations(records, through_association)
           through_records = records.map {|record| record.send(through_association)}.flatten
         end
@@ -239,11 +246,14 @@ module ActiveRecord
       end
 
       def find_associated_records(ids, reflection, preload_options)
+        logger.debug(&quot;!!!!!!!!!!!!!!!!!!!! ACC find_associated_records #{reflection.inspect}\n#{preload_options.inspect}&quot;)
         options = reflection.options
         table_name = reflection.klass.quoted_table_name
 
         if interface = reflection.options[:as]
+          # interface_class = reflection.active_record
           conditions = &quot;#{reflection.klass.quoted_table_name}.#{connection.quote_column_name &quot;#{interface}_id&quot;} IN (?) and #{reflection.klass.quoted_table_name}.#{connection.quote_column_name &quot;#{interface}_type&quot;} = '#{self.base_class.name.demodulize}'&quot;
+          # conditions = &quot;#{reflection.klass.quoted_table_name}.#{connection.quote_column_name &quot;#{interface}_id&quot;} IN (?) and #{reflection.klass.quoted_table_name}.#{connection.quote_column_name &quot;#{interface}_type&quot;} = '#{interface_class.name.demodulize}'&quot;
         else
           foreign_key = reflection.primary_key_name
           conditions = &quot;#{reflection.klass.quoted_table_name}.#{foreign_key} IN (?)&quot;</diff>
      <filename>activerecord/lib/active_record/association_preload.rb</filename>
    </modified>
  </modified>
  <removed type="array"/>
  <parents type="array">
    <parent>
      <id>67e8ec0e07314d367b1dc19ed3a1edf05105f8ce</id>
    </parent>
  </parents>
  <author>
    <name>Andrew Chase</name>
    <email>andrew@edith.glyde.com</email>
  </author>
  <url>http://github.com/glyde/rails/commit/e9b955eff8f420ebd842db827260708a23e3347a</url>
  <id>e9b955eff8f420ebd842db827260708a23e3347a</id>
  <committed-date>2008-06-27T17:17:19-07:00</committed-date>
  <authored-date>2008-06-27T17:17:19-07:00</authored-date>
  <message>Changing AR::AssociationPreload::ClassMethods#preload_associations to correctly preload associations on mixed groups of parents.</message>
  <tree>c1bcffd3d956840f741616bb8a3e5b30ed52e76a</tree>
  <committer>
    <name>Andrew Chase</name>
    <email>andrew@edith.glyde.com</email>
  </committer>
</commit>
