aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRafael França <rafaelmfranca@gmail.com>2017-01-31 01:20:21 -0500
committerGitHub <noreply@github.com>2017-01-31 01:20:21 -0500
commit505463c859927408665ce141426f098fea303a4e (patch)
tree831bf669ffd54ce5d9450bf4071152d14f2206f3
parent44901ca9039dcf512a706b06c77e11004e661666 (diff)
parente09da8bf7853f8f4f1ebb5c52f9b688a32b4dfaa (diff)
downloadrails-505463c859927408665ce141426f098fea303a4e.tar.gz
rails-505463c859927408665ce141426f098fea303a4e.tar.bz2
rails-505463c859927408665ce141426f098fea303a4e.zip
Merge pull request #27838 from kamipo/reload_destroyed_through_record
Reload `through_record` that has been destroyed in `create_through_record`
-rw-r--r--activerecord/lib/active_record/associations/has_one_through_association.rb4
-rw-r--r--activerecord/test/cases/associations/has_one_through_associations_test.rb7
2 files changed, 11 insertions, 0 deletions
diff --git a/activerecord/lib/active_record/associations/has_one_through_association.rb b/activerecord/lib/active_record/associations/has_one_through_association.rb
index 604904abcc..1183bdf6f4 100644
--- a/activerecord/lib/active_record/associations/has_one_through_association.rb
+++ b/activerecord/lib/active_record/associations/has_one_through_association.rb
@@ -22,6 +22,10 @@ module ActiveRecord
elsif record
attributes = construct_join_attributes(record)
+ if through_record && through_record.destroyed?
+ through_record = through_proxy.tap(&:reload).target
+ end
+
if through_record
through_record.update(attributes)
elsif owner.new_record?
diff --git a/activerecord/test/cases/associations/has_one_through_associations_test.rb b/activerecord/test/cases/associations/has_one_through_associations_test.rb
index 432c3526a5..38a729d2d4 100644
--- a/activerecord/test/cases/associations/has_one_through_associations_test.rb
+++ b/activerecord/test/cases/associations/has_one_through_associations_test.rb
@@ -86,6 +86,13 @@ class HasOneThroughAssociationsTest < ActiveRecord::TestCase
assert_nil @member.club
end
+ def test_set_record_after_delete_association
+ @member.club = nil
+ @member.club = clubs(:moustache_club)
+ @member.reload
+ assert_equal clubs(:moustache_club), @member.club
+ end
+
def test_has_one_through_polymorphic
assert_equal clubs(:moustache_club), @member.sponsor_club
end