Permalink
Browse files

Merge pull request #29593 from kratob/master

ActiveRecord: do not create "has many through" records that have been removed
  • Loading branch information...
eileencodes committed Jun 28, 2017
2 parents d766b64 + c41247a commit f138ffab130488348cc41cba1bceba9535141373
@@ -1,3 +1,10 @@
* 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*
* Merging two relations representing nested joins no longer transforms the joins of
the merged relation into LEFT OUTER JOIN. Example to clarify:
@@ -109,6 +109,11 @@ def build_record(attributes)
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
@@ -319,6 +319,17 @@ def test_build_then_save_with_has_one_inverse
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")

0 comments on commit f138ffa

Please sign in to comment.