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