<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array"/>
  <modified type="array">
    <modified>
      <diff>@@ -31,12 +31,12 @@ module ActiveRecord
       private
 
       def preload_one_association(records, association, preload_options={})
-        reflection = reflections[association]
-        raise ConfigurationError, &quot;Association named '#{ association }' was not found; perhaps you misspelled it?&quot; unless reflection
-
-        # Not all records have the same class, so group then preload.
-        records.group_by(&amp;:class).each do |klass, records|
-          reflection = klass.reflections[association]
+        class_to_reflection = {}
+        # Not all records have the same class, so group then preload
+        # 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
           send(&quot;preload_#{reflection.macro}_association&quot;, records, reflection, preload_options)
         end
       end</diff>
      <filename>activerecord/lib/active_record/association_preload.rb</filename>
    </modified>
    <modified>
      <diff>@@ -603,4 +603,10 @@ class EagerAssociationTest &lt; ActiveRecord::TestCase
       assert_equal 3, authors(:david).posts_with_comments.count(:conditions =&gt; &quot;length(comments.body) &gt; 15&quot;)
     end
   end
+
+  def test_load_with_sti_sharing_association
+    assert_queries(2) do #should not do 1 query per subclass
+      Comment.find :all, :include =&gt; :post
+    end
+  end
 end</diff>
      <filename>activerecord/test/cases/associations/eager_test.rb</filename>
    </modified>
  </modified>
  <removed type="array"/>
  <parents type="array">
    <parent>
      <id>0cbdd96c349c56c47299ca3c2bfa5d8c4f5e5a11</id>
    </parent>
  </parents>
  <author>
    <name>Frederick Cheung</name>
    <email>frederick.cheung@gmail.com</email>
  </author>
  <url>http://github.com/rails/rails/commit/236f0bb67adecbc1e6dac5258e4a8cb310ffd7a4</url>
  <id>236f0bb67adecbc1e6dac5258e4a8cb310ffd7a4</id>
  <committed-date>2008-05-11T14:14:07-07:00</committed-date>
  <authored-date>2008-05-06T16:12:17-07:00</authored-date>
  <message>When preloading group by reflection rather than by class [#125 state:resolved]

This avoids extra queries when several subclasses inherit the association
from their parent class, while still coping with subclasses redefining
associations.

Signed-off-by: Pratik Naik &lt;pratiknaik@gmail.com&gt;</message>
  <tree>aaca136f3ba80f589e24595cd953f064697ef0bb</tree>
  <committer>
    <name>Pratik Naik</name>
    <email>pratiknaik@gmail.com</email>
  </committer>
</commit>
