<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array">
    <added>
      <filename>activerecord/test/fixtures/member_types.yml</filename>
    </added>
    <added>
      <filename>activerecord/test/models/member_type.rb</filename>
    </added>
  </added>
  <modified type="array">
    <modified>
      <diff>@@ -204,9 +204,18 @@ module ActiveRecord
           unless through_records.empty?
             source = reflection.source_reflection.name
             through_records.first.class.preload_associations(through_records, source)
-            through_records.each do |through_record|
-              add_preloaded_record_to_collection(id_to_record_map[through_record[through_primary_key].to_s],
-                                                 reflection.name, through_record.send(source))
+            if through_reflection.macro == :belongs_to
+              rev_id_to_record_map, rev_ids = construct_id_map(records, through_primary_key)
+              rev_primary_key = through_reflection.klass.primary_key
+              through_records.each do |through_record|
+                add_preloaded_record_to_collection(rev_id_to_record_map[through_record[rev_primary_key].to_s],
+                                                   reflection.name, through_record.send(source))
+              end
+            else
+              through_records.each do |through_record|
+                add_preloaded_record_to_collection(id_to_record_map[through_record[through_primary_key].to_s],
+                                                   reflection.name, through_record.send(source))
+              end
             end
           end
         else</diff>
      <filename>activerecord/lib/active_record/association_preload.rb</filename>
    </modified>
    <modified>
      <diff>@@ -83,7 +83,11 @@ module ActiveRecord
 
       def to_ary
         load_target
-        @target.to_ary
+        if @target.is_a?(Array)
+          @target.to_ary
+        else
+          Array(@target)
+        end
       end
 
       def reset</diff>
      <filename>activerecord/lib/active_record/associations/association_collection.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,5 +1,6 @@
 require &quot;cases/helper&quot;
 require 'models/club'
+require 'models/member_type'
 require 'models/member'
 require 'models/membership'
 require 'models/sponsor'
@@ -7,7 +8,7 @@ require 'models/organization'
 require 'models/member_detail'
 
 class HasOneThroughAssociationsTest &lt; ActiveRecord::TestCase
-  fixtures :members, :clubs, :memberships, :sponsors, :organizations
+  fixtures :member_types, :members, :clubs, :memberships, :sponsors, :organizations
   
   def setup
     @member = members(:groucho)
@@ -158,4 +159,18 @@ class HasOneThroughAssociationsTest &lt; ActiveRecord::TestCase
     assert @new_organization.members.include?(@member)
   end
 
+  def test_preloading_has_one_through_on_belongs_to
+    assert_not_nil @member.member_type
+    @organization = organizations(:nsa)
+    @member_detail = MemberDetail.new
+    @member.member_detail = @member_detail
+    @member.organization = @organization
+    @member_details = assert_queries(3) do
+      MemberDetail.find(:all, :include =&gt; :member_type)
+    end
+    @new_detail = @member_details[0]
+    assert @new_detail.loaded_member_type?
+    assert_not_nil assert_no_queries { @new_detail.member_type }
+  end
+
 end</diff>
      <filename>activerecord/test/cases/associations/has_one_through_associations_test.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,4 +1,6 @@
 groucho:
   name: Groucho Marx
+  member_type_id: 1
 some_other_guy:
-  name: Englebert Humperdink
\ No newline at end of file
+  name: Englebert Humperdink
+  member_type_id: 2</diff>
      <filename>activerecord/test/fixtures/members.yml</filename>
    </modified>
    <modified>
      <diff>@@ -8,4 +8,5 @@ class Member &lt; ActiveRecord::Base
   has_one :sponsor_club, :through =&gt; :sponsor
   has_one :member_detail
   has_one :organization, :through =&gt; :member_detail
+  belongs_to :member_type
 end
\ No newline at end of file</diff>
      <filename>activerecord/test/models/member.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,4 +1,5 @@
 class MemberDetail &lt; ActiveRecord::Base
   belongs_to :member
   belongs_to :organization
+  has_one :member_type, :through =&gt; :member
 end</diff>
      <filename>activerecord/test/models/member_detail.rb</filename>
    </modified>
    <modified>
      <diff>@@ -195,6 +195,7 @@ ActiveRecord::Schema.define do
 
   create_table :members, :force =&gt; true do |t|
     t.string :name
+    t.integer :member_type_id
   end
 
   create_table :member_details, :force =&gt; true do |t|
@@ -210,6 +211,10 @@ ActiveRecord::Schema.define do
     t.string :type
   end
 
+  create_table :member_types, :force =&gt; true do |t|
+    t.string :name
+  end
+
   create_table :references, :force =&gt; true do |t|
     t.integer :person_id
     t.integer :job_id</diff>
      <filename>activerecord/test/schema/schema.rb</filename>
    </modified>
  </modified>
  <removed type="array"/>
  <parents type="array">
    <parent>
      <id>8326b95169ae6af3b81f5596107fef9db4bcbbb0</id>
    </parent>
  </parents>
  <author>
    <name>Matt Jones</name>
    <email>al2o3cr@gmail.com</email>
  </author>
  <url>http://github.com/rails/rails/commit/a9422cc1db9501a80ecf2c25a5d3b0c4f4f32763</url>
  <id>a9422cc1db9501a80ecf2c25a5d3b0c4f4f32763</id>
  <committed-date>2008-12-18T11:19:36-08:00</committed-date>
  <authored-date>2008-12-02T13:21:21-08:00</authored-date>
  <message>Fix preloading of has_one :through associations on belongs_to [#1507 state:resolved]

Signed-off-by: Frederick Cheung &lt;frederick.cheung@gmail.com&gt;</message>
  <tree>27f933f524f033434448fd953cf24285c36d007f</tree>
  <committer>
    <name>Pratik Naik</name>
    <email>pratiknaik@gmail.com</email>
  </committer>
</commit>
