diff options
author | Aaron Patterson <aaron.patterson@gmail.com> | 2011-01-07 11:28:11 -0800 |
---|---|---|
committer | Aaron Patterson <aaron.patterson@gmail.com> | 2011-01-07 11:28:11 -0800 |
commit | 839f3bf6822ed3698df1e606c4215d650312f33e (patch) | |
tree | 1f53277c77c8b64679f9bfda1e184a0c4ce91730 /activerecord/lib/active_record/associations.rb | |
parent | 8a1c5337808c53c5e9d2d842a09a90599c497e89 (diff) | |
download | rails-839f3bf6822ed3698df1e606c4215d650312f33e.tar.gz rails-839f3bf6822ed3698df1e606c4215d650312f33e.tar.bz2 rails-839f3bf6822ed3698df1e606c4215d650312f33e.zip |
just use a hash for doing association caching
Diffstat (limited to 'activerecord/lib/active_record/associations.rb')
-rw-r--r-- | activerecord/lib/active_record/associations.rb | 14 |
1 files changed, 7 insertions, 7 deletions
diff --git a/activerecord/lib/active_record/associations.rb b/activerecord/lib/active_record/associations.rb index f6a7fd3ca0..78652ba0c5 100644 --- a/activerecord/lib/active_record/associations.rb +++ b/activerecord/lib/active_record/associations.rb @@ -132,24 +132,24 @@ module ActiveRecord # Clears out the association cache. def clear_association_cache #:nodoc: - self.class.reflect_on_all_associations.to_a.each do |assoc| - instance_variable_set "@#{assoc.name}", nil - end if persisted? + @association_cache.clear if persisted? end + # :nodoc: + attr_reader :association_cache + private # Returns the specified association instance if it responds to :loaded?, nil otherwise. def association_instance_get(name) - ivar = "@#{name}" - if instance_variable_defined?(ivar) - association = instance_variable_get(ivar) + if @association_cache.key? name + association = @association_cache[name] association if association.respond_to?(:loaded?) end end # Set the specified association instance. def association_instance_set(name, association) - instance_variable_set("@#{name}", association) + @association_cache[name] = association end # Associations are a set of macro-like class methods for tying objects together through |