diff options
author | Sammy Larbi <sam@codeodor.com> | 2014-08-31 14:18:02 -0500 |
---|---|---|
committer | Sammy Larbi <sam@codeodor.com> | 2014-09-04 10:05:01 -0500 |
commit | 4abbdbdf1656e9bed6f744723a901cbaf6878df4 (patch) | |
tree | e4cee59666ea912a081f80722d7218621b7ed8b9 /activerecord/lib/active_record | |
parent | 40f9407b872add660db45e59316a5a195f16d563 (diff) | |
download | rails-4abbdbdf1656e9bed6f744723a901cbaf6878df4.tar.gz rails-4abbdbdf1656e9bed6f744723a901cbaf6878df4.tar.bz2 rails-4abbdbdf1656e9bed6f744723a901cbaf6878df4.zip |
Skip StatementCache for eager loaded associations (Fixes #16761)
Eagerly loaded collection and singular associations are ignored by the StatementCache, which causes errors when the queries they generate reference columns that were not eagerly loaded.
This commit skips the creation of the StatementCache as a fix for these scenarios.
Diffstat (limited to 'activerecord/lib/active_record')
3 files changed, 3 insertions, 2 deletions
diff --git a/activerecord/lib/active_record/associations/collection_association.rb b/activerecord/lib/active_record/associations/collection_association.rb index 065a2cff01..1836ff0910 100644 --- a/activerecord/lib/active_record/associations/collection_association.rb +++ b/activerecord/lib/active_record/associations/collection_association.rb @@ -407,7 +407,7 @@ module ActiveRecord private def get_records - return scope.to_a if reflection.scope_chain.any?(&:any?) + return scope.to_a if reflection.scope_chain.any?(&:any?) || scope.eager_loading? conn = klass.connection sc = reflection.association_scope_cache(conn, owner) do diff --git a/activerecord/lib/active_record/associations/singular_association.rb b/activerecord/lib/active_record/associations/singular_association.rb index f2e3a4e40f..b9326b9683 100644 --- a/activerecord/lib/active_record/associations/singular_association.rb +++ b/activerecord/lib/active_record/associations/singular_association.rb @@ -39,7 +39,7 @@ module ActiveRecord end def get_records - return scope.limit(1).to_a if reflection.scope_chain.any?(&:any?) + return scope.limit(1).to_a if reflection.scope_chain.any?(&:any?) || scope.eager_loading? conn = klass.connection sc = reflection.association_scope_cache(conn, owner) do diff --git a/activerecord/lib/active_record/core.rb b/activerecord/lib/active_record/core.rb index 82b9c79533..2e9c9e3197 100644 --- a/activerecord/lib/active_record/core.rb +++ b/activerecord/lib/active_record/core.rb @@ -152,6 +152,7 @@ module ActiveRecord def find_by(*args) return super if current_scope || !(Hash === args.first) || reflect_on_all_aggregations.any? + return super if default_scopes.any? hash = args.first |