1
0
Fork 0
mirror of https://github.com/rails/rails.git synced 2022-11-09 12:12:34 -05:00

Merge pull request #29593 from kratob/master

ActiveRecord: do not create "has many through" records that have been removed
This commit is contained in:
Eileen M. Uchitelle 2017-06-28 08:20:57 -04:00 committed by Rafael Mendonça França
parent 5aa510eed0
commit a22c39e9cc
3 changed files with 24 additions and 0 deletions

View file

@ -1,3 +1,11 @@
* Previously, when building records using a `has_many :through` association,
if the child records were deleted before the parent was saved, they would
still be persisted. Now, if child records are deleted before the parent is saved
on a `has_many :through` association, the child records will not be persisted.
*Tobias Kraze*
## Rails 5.1.2 (June 26, 2017) ##
* Restore previous behavior of collection proxies: their values can have

View file

@ -109,6 +109,11 @@ module ActiveRecord
record
end
def remove_records(existing_records, records, method)
super
delete_through_records(records)
end
def target_reflection_has_associated_record?
!(through_reflection.belongs_to? && owner[through_reflection.foreign_key].blank?)
end

View file

@ -337,6 +337,17 @@ class HasManyThroughAssociationsTest < ActiveRecord::TestCase
assert_includes post.single_people, person
end
def test_build_then_remove_then_save
post = posts(:thinking)
post.people.build(first_name: "Bob")
ted = post.people.build(first_name: "Ted")
post.people.delete(ted)
post.save!
post.reload
assert_equal ["Bob"], post.people.collect(&:first_name)
end
def test_both_parent_ids_set_when_saving_new
post = Post.new(title: "Hello", body: "world")
person = Person.new(first_name: "Sean")