aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorWill <will@makisu.local>2009-12-16 10:49:06 -0600
committerJoshua Peek <josh@joshpeek.com>2009-12-16 10:49:53 -0600
commitbf6af5f71917b5615edb5905729b22772133eea4 (patch)
tree5a7a3d79c7f9288ac52151acbef7be45e1171f7a
parent1b27f5c4f72384081083fa025b6b10e5ab02ae5e (diff)
downloadrails-bf6af5f71917b5615edb5905729b22772133eea4.tar.gz
rails-bf6af5f71917b5615edb5905729b22772133eea4.tar.bz2
rails-bf6af5f71917b5615edb5905729b22772133eea4.zip
When passing force_reload = true to an association, don't use the query cache [#1827 state:resolved]
Signed-off-by: Joshua Peek <josh@joshpeek.com>
-rwxr-xr-xactiverecord/lib/active_record/associations.rb4
-rw-r--r--activerecord/test/cases/associations_test.rb10
2 files changed, 12 insertions, 2 deletions
diff --git a/activerecord/lib/active_record/associations.rb b/activerecord/lib/active_record/associations.rb
index 0fcd288fc5..8dcb3a7711 100755
--- a/activerecord/lib/active_record/associations.rb
+++ b/activerecord/lib/active_record/associations.rb
@@ -1325,7 +1325,7 @@ module ActiveRecord
if association.nil? || force_reload
association = association_proxy_class.new(self, reflection)
- retval = association.reload
+ retval = force_reload ? reflection.klass.uncached { association.reload } : association.reload
if retval.nil? and association_proxy_class == BelongsToAssociation
association_instance_set(reflection.name, nil)
return nil
@@ -1370,7 +1370,7 @@ module ActiveRecord
association_instance_set(reflection.name, association)
end
- association.reload if force_reload
+ reflection.klass.uncached { association.reload } if force_reload
association
end
diff --git a/activerecord/test/cases/associations_test.rb b/activerecord/test/cases/associations_test.rb
index e429c1d157..9bc34bd750 100644
--- a/activerecord/test/cases/associations_test.rb
+++ b/activerecord/test/cases/associations_test.rb
@@ -64,6 +64,16 @@ class AssociationsTest < ActiveRecord::TestCase
assert !firm.clients(true).empty?, "New firm should have reloaded client objects"
assert_equal 1, firm.clients(true).size, "New firm should have reloaded clients count"
end
+
+ def test_force_reload_is_uncached
+ firm = Firm.create!("name" => "A New Firm, Inc")
+ client = Client.create!("name" => "TheClient.com", :firm => firm)
+ ActiveRecord::Base.cache do
+ firm.clients.each {}
+ assert_queries(0) { assert_not_nil firm.clients.each {} }
+ assert_queries(1) { assert_not_nil firm.clients(true).each {} }
+ end
+ end
end