Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Browse files

inversed instance should not be reloaded after stale state was changed

check at association reader that record is inverted and should not be reloaded because of stale was changed at target record
  • Loading branch information...
commit 05b178085a2ad3bf3f2c0dcd1ea40fb5e8c8dc0d 1 parent dcff027
@dmitry dmitry authored
View
7 activerecord/lib/active_record/associations/association.rb
@@ -42,6 +42,7 @@ def reset
@loaded = false
@target = nil
@stale_state = nil
+ @inversed = false
end
# Reloads the \target and returns +self+ on success.
@@ -59,8 +60,9 @@ def loaded?
# Asserts the \target has been loaded setting the \loaded flag to +true+.
def loaded!
- @loaded = true
+ @loaded = true
@stale_state = stale_state
+ @inversed = false
end
# The target is stale if the target no longer points to the record(s) that the
@@ -70,7 +72,7 @@ def loaded!
#
# Note that if the target has not been loaded, it is not considered stale.
def stale_target?
- loaded? && @stale_state != stale_state
+ !@inversed && loaded? && @stale_state != stale_state
end
# Sets the target of this association to <tt>\target</tt>, and the \loaded flag to +true+.
@@ -104,6 +106,7 @@ def set_inverse_instance(record)
if record && invertible_for?(record)
inverse = record.association(inverse_reflection_for(record).name)
inverse.target = owner
+ inverse.instance_variable_set(:@inversed, true)
end
end
View
12 activerecord/test/cases/associations/inverse_associations_test.rb
@@ -603,6 +603,18 @@ def test_child_instance_should_be_shared_with_replaced_via_method_parent
assert_equal face.description, new_man.polymorphic_face.description, "Description of face should be the same after changes to replaced-parent-owned instance"
end
+ def test_inversed_instance_should_not_be_reloaded_after_stale_state_changed
+ new_man = Man.new
+ face = Face.new
+ new_man.face = face
+
+ old_inversed_man = face.man
+ new_man.save!
+ new_inversed_man = face.man
+
+ assert_equal old_inversed_man.object_id, new_inversed_man.object_id
+ end
+
def test_should_not_try_to_set_inverse_instances_when_the_inverse_is_a_has_many
i = interests(:llama_wrangling)
m = i.polymorphic_man
Please sign in to comment.
Something went wrong with that request. Please try again.