diff options
author | Andrew White <andyw@pixeltrix.co.uk> | 2012-06-01 03:03:50 +0100 |
---|---|---|
committer | Andrew White <andyw@pixeltrix.co.uk> | 2012-06-01 03:03:50 +0100 |
commit | 7056079761eba049bbc6108946a1626fe169dbdf (patch) | |
tree | 6f55bdc0521a3dd521cb2776da07d927236203cf /activerecord/lib/active_record | |
parent | 4df968071436a4585c8e4694efecfabb02f1a806 (diff) | |
download | rails-7056079761eba049bbc6108946a1626fe169dbdf.tar.gz rails-7056079761eba049bbc6108946a1626fe169dbdf.tar.bz2 rails-7056079761eba049bbc6108946a1626fe169dbdf.zip |
Restore behavior of Active Record 3.2.3 scopes
A series of commits relating to preloading and scopes caused a regression.
Cloning the relation calls initialize_copy which resets a number of instance
variables to nil. Without this the scope thinks that it is already loaded
when it is called again.
Reverts the following commits:
13f1401a6cf0266a3b0a91b173f976db2d4e50f3
8491740ca5361ba9df20e1c8b906c709f5bfbc12
dffbb521a0d00c8673a3ad6e0e8ff526f32daf4e
Fixes #6575, #6576 & #6577
Diffstat (limited to 'activerecord/lib/active_record')
-rw-r--r-- | activerecord/lib/active_record/associations/preloader/association.rb | 5 | ||||
-rw-r--r-- | activerecord/lib/active_record/scoping/named.rb | 4 |
2 files changed, 4 insertions, 5 deletions
diff --git a/activerecord/lib/active_record/associations/preloader/association.rb b/activerecord/lib/active_record/associations/preloader/association.rb index ab50e43ea0..779f8164cc 100644 --- a/activerecord/lib/active_record/associations/preloader/association.rb +++ b/activerecord/lib/active_record/associations/preloader/association.rb @@ -77,7 +77,7 @@ module ActiveRecord # Some databases impose a limit on the number of ids in a list (in Oracle it's 1000) # Make several smaller queries if necessary or make one query if the adapter supports it sliced = owner_keys.each_slice(model.connection.in_clause_length || owner_keys.size) - records = sliced.map { |slice| records_for(slice).to_a }.flatten + records = sliced.map { |slice| records_for(slice) }.flatten end # Each record may have multiple owners, and vice-versa @@ -93,8 +93,7 @@ module ActiveRecord end def build_scope - scope = klass.unscoped - scope.default_scoped = true + scope = klass.scoped scope = scope.where(process_conditions(options[:conditions])) scope = scope.where(process_conditions(preload_options[:conditions])) diff --git a/activerecord/lib/active_record/scoping/named.rb b/activerecord/lib/active_record/scoping/named.rb index d6b0265fb3..9c50baa647 100644 --- a/activerecord/lib/active_record/scoping/named.rb +++ b/activerecord/lib/active_record/scoping/named.rb @@ -34,7 +34,7 @@ module ActiveRecord if current_scope current_scope.clone else - scope = relation + scope = relation.clone scope.default_scoped = true scope end @@ -48,7 +48,7 @@ module ActiveRecord if current_scope current_scope.scope_for_create else - scope = relation + scope = relation.clone scope.default_scoped = true scope.scope_for_create end |