From deda0ee4a8008475629f020e0334f64cc05215c8 Mon Sep 17 00:00:00 2001 From: David Heinemeier Hansson Date: Sat, 25 Jun 2005 10:56:20 +0000 Subject: Fixed that clear_association_cache doesn't delete new associations on new records (so you can safely place new records in the session with Action Pack without having new associations wiped) #1494 [cluon] git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@1504 5ecf4fe2-1ee6-0310-87b1-e25e094e27de --- activerecord/CHANGELOG | 2 ++ activerecord/lib/active_record/associations.rb | 2 +- activerecord/test/base_test.rb | 21 +++++++++++++++++++++ 3 files changed, 24 insertions(+), 1 deletion(-) diff --git a/activerecord/CHANGELOG b/activerecord/CHANGELOG index f2bc01bc06..b487f442b3 100644 --- a/activerecord/CHANGELOG +++ b/activerecord/CHANGELOG @@ -1,5 +1,7 @@ *SVN* +* Fixed that clear_association_cache doesn't delete new associations on new records (so you can safely place new records in the session with Action Pack without having new associations wiped) #1494 [cluon] + * Fixed that calling Model.find([]) returns [] and doesn't throw an exception #1379 * Fixed that adding a record to a has_and_belongs_to collection would always save it -- now it only saves if its a new record #1203 [Alisdair McDiarmid] diff --git a/activerecord/lib/active_record/associations.rb b/activerecord/lib/active_record/associations.rb index fffafb2a29..3fbe252144 100755 --- a/activerecord/lib/active_record/associations.rb +++ b/activerecord/lib/active_record/associations.rb @@ -17,7 +17,7 @@ module ActiveRecord def clear_association_cache #:nodoc: self.class.reflect_on_all_associations.to_a.each do |assoc| instance_variable_set "@#{assoc.name}", nil - end + end unless self.new_record? end # Associations are a set of macro-like class methods for tying objects together through foreign keys. They express relationships like diff --git a/activerecord/test/base_test.rb b/activerecord/test/base_test.rb index e0d2e9e695..fa1d621950 100755 --- a/activerecord/test/base_test.rb +++ b/activerecord/test/base_test.rb @@ -826,4 +826,25 @@ class BasicsTest < Test::Unit::TestCase assert_equal res, res2 end + def test_clear_association_cache_stored + firm = Firm.find(1) + assert_kind_of Firm, firm + + firm.clear_association_cache + assert_equal Firm.find(1).clients.collect{ |x| x.name }.sort, firm.clients.collect{ |x| x.name }.sort + end + + def test_clear_association_cache_new_record + firm = Firm.new + client_stored = Client.find(3) + client_new = Client.new + client_new.name = "The Joneses" + clients = [ client_stored, client_new ] + + firm.clients << clients + + firm.clear_association_cache + + assert_equal firm.clients.collect{ |x| x.name }.sort, clients.collect{ |x| x.name }.sort + end end -- cgit v1.2.3