aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord
diff options
context:
space:
mode:
authorKasper Timm Hansen <kaspth@gmail.com>2017-07-16 21:03:29 +0200
committerGitHub <noreply@github.com>2017-07-16 21:03:29 +0200
commit919b55d9747f69c566616d740616d11ef2db8c58 (patch)
tree48039fb65268710d1b0586fefd7c8a8696448534 /activerecord
parentc74820d516bdb731a3df3c94192a542abb6c393b (diff)
parentd476553d1cdeee0805585c2d4e2e6ee6be841288 (diff)
downloadrails-919b55d9747f69c566616d740616d11ef2db8c58.tar.gz
rails-919b55d9747f69c566616d740616d11ef2db8c58.tar.bz2
rails-919b55d9747f69c566616d740616d11ef2db8c58.zip
Merge pull request #29814 from kamipo/dont_cache_scope_for_create
Don't cache `scope_for_create`
Diffstat (limited to 'activerecord')
-rw-r--r--activerecord/lib/active_record/associations/association.rb2
-rw-r--r--activerecord/lib/active_record/associations/singular_association.rb2
-rw-r--r--activerecord/lib/active_record/relation.rb4
-rw-r--r--activerecord/test/cases/relation_test.rb12
4 files changed, 6 insertions, 14 deletions
diff --git a/activerecord/lib/active_record/associations/association.rb b/activerecord/lib/active_record/associations/association.rb
index 6acf831759..c166cfd68f 100644
--- a/activerecord/lib/active_record/associations/association.rb
+++ b/activerecord/lib/active_record/associations/association.rb
@@ -171,7 +171,7 @@ module ActiveRecord
skip_assign = [reflection.foreign_key, reflection.type].compact
assigned_keys = record.changed_attribute_names_to_save
assigned_keys += except_from_scope_attributes.keys.map(&:to_s)
- attributes = scope_for_create.except(*(assigned_keys - skip_assign))
+ attributes = scope_for_create.except!(*(assigned_keys - skip_assign))
record.send(:_assign_attributes, attributes) if attributes.any?
set_inverse_instance(record)
end
diff --git a/activerecord/lib/active_record/associations/singular_association.rb b/activerecord/lib/active_record/associations/singular_association.rb
index 4896afcca7..66993b9bf7 100644
--- a/activerecord/lib/active_record/associations/singular_association.rb
+++ b/activerecord/lib/active_record/associations/singular_association.rb
@@ -31,7 +31,7 @@ module ActiveRecord
private
def scope_for_create
- super.except(klass.primary_key)
+ super.except!(klass.primary_key)
end
def find_target
diff --git a/activerecord/lib/active_record/relation.rb b/activerecord/lib/active_record/relation.rb
index 23cb1baaed..c5d98e970a 100644
--- a/activerecord/lib/active_record/relation.rb
+++ b/activerecord/lib/active_record/relation.rb
@@ -556,7 +556,7 @@ module ActiveRecord
end
def reset
- @to_sql = @scope_for_create = @arel = @loaded = @should_eager_load = nil
+ @to_sql = @arel = @loaded = @should_eager_load = nil
@records = [].freeze
@offsets = {}
self
@@ -590,7 +590,7 @@ module ActiveRecord
end
def scope_for_create
- @scope_for_create ||= where_values_hash.merge!(create_with_value.stringify_keys)
+ where_values_hash.merge!(create_with_value.stringify_keys)
end
# Returns true if relation needs eager loading.
diff --git a/activerecord/test/cases/relation_test.rb b/activerecord/test/cases/relation_test.rb
index d2859cbafd..82b071fb98 100644
--- a/activerecord/test/cases/relation_test.rb
+++ b/activerecord/test/cases/relation_test.rb
@@ -89,21 +89,13 @@ module ActiveRecord
def test_create_with_value_with_wheres
relation = Relation.new(Post, Post.arel_table, Post.predicate_builder)
- relation.where!(id: 10)
- relation.create_with_value = { hello: "world" }
- assert_equal({ "hello" => "world", "id" => 10 }, relation.scope_for_create)
- end
-
- # FIXME: is this really wanted or expected behavior?
- def test_scope_for_create_is_cached
- relation = Relation.new(Post, Post.arel_table, Post.predicate_builder)
assert_equal({}, relation.scope_for_create)
relation.where!(id: 10)
- assert_equal({}, relation.scope_for_create)
+ assert_equal({ "id" => 10 }, relation.scope_for_create)
relation.create_with_value = { hello: "world" }
- assert_equal({}, relation.scope_for_create)
+ assert_equal({ "hello" => "world", "id" => 10 }, relation.scope_for_create)
end
def test_bad_constants_raise_errors