diff --git a/activerecord/lib/active_record/associations.rb b/activerecord/lib/active_record/associations.rb
index 9b59266..337ea6f 100755
--- a/activerecord/lib/active_record/associations.rb
+++ b/activerecord/lib/active_record/associations.rb
@@ -1341,7 +1341,7 @@ module ActiveRecord
if association.nil? || force_reload
association = association_proxy_class.new(self, reflection)
- retval = force_reload ? reflection.klass.uncached { association.reload } : association.reload
+ retval = force_reload ? reflection.uncached { association.reload } : association.reload
if retval.nil? and association_proxy_class == BelongsToAssociation
association_instance_set(reflection.name, nil)
return nil
diff --git a/activerecord/lib/active_record/reflection.rb b/activerecord/lib/active_record/reflection.rb
index 0e48e22..2255b22 100644
--- a/activerecord/lib/active_record/reflection.rb
+++ b/activerecord/lib/active_record/reflection.rb
@@ -104,6 +104,15 @@ module ActiveRecord
@klass ||= class_name.constantize
end
+ def uncached(&block)
+ raise(options.inspect) if Thread.current[:ha]
+ if options[:polymorphic]
+ yield
+ else
+ klass.uncached(&block)
+ end
+ end
+
# Returns the class name for the macro. For example, composed_of :balance, :class_name => 'Money' returns 'Money'
# and has_many :clients returns 'Client'.
def class_name