提交 c10152da 编写于 作者: A Anmol Chopra

Inverse instance should not be reloaded during autosave if called in validation

Record saved in save_has_one_association already make call to association.loaded! via record's before_save callback of save_belongs_to_association,
 but this will reload object if accessed in record's validation.
上级 a7d7277f
......@@ -436,6 +436,9 @@ def save_has_one_association(reflection)
if (autosave && record.changed_for_autosave?) || new_record? || record_changed?(reflection, record, key)
unless reflection.through_reflection
record[reflection.foreign_key] = key
if inverse_reflection = reflection.inverse_of
record.association(inverse_reflection.name).loaded!
end
end
saved = record.save(validate: !autosave)
......
......@@ -672,6 +672,16 @@ def test_inversed_instance_should_not_be_reloaded_after_stale_state_changed
assert_equal old_inversed_man.object_id, new_inversed_man.object_id
end
def test_inversed_instance_should_not_be_reloaded_after_stale_state_changed_with_validation
face = Face.new man: Man.new
old_inversed_man = face.man
face.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
......
......@@ -8,4 +8,8 @@ class Face < ActiveRecord::Base
# These is a "broken" inverse_of for the purposes of testing
belongs_to :horrible_man, class_name: "Man", inverse_of: :horrible_face
belongs_to :horrible_polymorphic_man, polymorphic: true, inverse_of: :horrible_polymorphic_face
validate do
man
end
end
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册