diff options
author | Rafael França <rafaelmfranca@gmail.com> | 2018-04-11 21:03:11 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-04-11 21:03:11 -0400 |
commit | 7622b85a300a1863ece44eb429ddabdadbee7f77 (patch) | |
tree | dcdc8c7fd86e546015206e8b6a7da6679bfa5e70 | |
parent | 733f3cbea8d81170a16425c46d194f3e51e1422e (diff) | |
parent | 115bbdac2b8e11ec92241b839665c5811cc8a2fb (diff) | |
download | rails-7622b85a300a1863ece44eb429ddabdadbee7f77.tar.gz rails-7622b85a300a1863ece44eb429ddabdadbee7f77.tar.bz2 rails-7622b85a300a1863ece44eb429ddabdadbee7f77.zip |
Merge pull request #32536 from lsylvester/fix-immutable-relation-error-with-http-caching-and-collection-caching
Fix ActiveRecord::ImmutableRelation is raised when collection caching and HTTP caching are used together
-rw-r--r-- | activerecord/lib/active_record/relation.rb | 5 | ||||
-rw-r--r-- | activerecord/test/cases/relation/mutation_test.rb | 2 | ||||
-rw-r--r-- | activerecord/test/cases/relation_test.rb | 8 |
3 files changed, 12 insertions, 3 deletions
diff --git a/activerecord/lib/active_record/relation.rb b/activerecord/lib/active_record/relation.rb index 38a364ff88..3c66d2f8be 100644 --- a/activerecord/lib/active_record/relation.rb +++ b/activerecord/lib/active_record/relation.rb @@ -8,8 +8,8 @@ module ActiveRecord :extending, :unscope] SINGLE_VALUE_METHODS = [:limit, :offset, :lock, :readonly, :reordering, - :reverse_order, :distinct, :create_with, :skip_query_cache, - :skip_preloading] + :reverse_order, :distinct, :create_with, :skip_query_cache] + CLAUSE_METHODS = [:where, :having, :from] INVALID_METHODS_FOR_DELETE_ALL = [:distinct, :group, :having] @@ -19,6 +19,7 @@ module ActiveRecord include FinderMethods, Calculations, SpawnMethods, QueryMethods, Batches, Explain, Delegation attr_reader :table, :klass, :loaded, :predicate_builder + attr_accessor :skip_preloading_value alias :model :klass alias :loaded? :loaded alias :locked? :lock_value diff --git a/activerecord/test/cases/relation/mutation_test.rb b/activerecord/test/cases/relation/mutation_test.rb index d6351bfe88..f82ecd4449 100644 --- a/activerecord/test/cases/relation/mutation_test.rb +++ b/activerecord/test/cases/relation/mutation_test.rb @@ -59,7 +59,7 @@ module ActiveRecord assert_equal [], relation.extending_values end - (Relation::SINGLE_VALUE_METHODS - [:lock, :reordering, :reverse_order, :create_with, :skip_query_cache, :skip_preloading]).each do |method| + (Relation::SINGLE_VALUE_METHODS - [:lock, :reordering, :reverse_order, :create_with, :skip_query_cache]).each do |method| test "##{method}!" do assert relation.public_send("#{method}!", :foo).equal?(relation) assert_equal :foo, relation.public_send("#{method}_value") diff --git a/activerecord/test/cases/relation_test.rb b/activerecord/test/cases/relation_test.rb index 4e75371147..0f446e06aa 100644 --- a/activerecord/test/cases/relation_test.rb +++ b/activerecord/test/cases/relation_test.rb @@ -315,6 +315,14 @@ module ActiveRecord assert_equal "type cast from database", UpdateAllTestModel.first.body end + def test_skip_preloading_after_arel_has_been_generated + assert_nothing_raised do + relation = Comment.all + relation.arel + relation.skip_preloading! + end + end + private def skip_if_sqlite3_version_includes_quoting_bug |