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

Merge pull request #9996 from mikz/master

Association with inverse_of does not set the parent in association building block
This commit is contained in:
Jon Leighton 2013-04-05 05:57:27 -07:00
commit 685cf144a9
3 changed files with 34 additions and 0 deletions

View file

@ -418,6 +418,23 @@
# This will expand the order :name to "authors".name.
Author.joins(:books).where('books.published = 1').order(:name)
* Fix associations with `:inverse_of` option when building association
with a block. Inside the block the parent object was different then
after the block.
Example:
parent.association.build do |child|
child.parent.equal?(parent) # false
end
# vs
child = parent.association.build
child.parent.equal?(parent) # true
*Michal Cichra*
## Rails 4.0.0.beta1 (February 25, 2013) ##

View file

@ -236,6 +236,7 @@ module ActiveRecord
skip_assign = [reflection.foreign_key, reflection.type].compact
attributes = create_scope.except(*(record.changed - skip_assign))
record.assign_attributes(attributes)
set_inverse_instance(record)
end
end
end

View file

@ -235,6 +235,22 @@ class InverseHasManyTests < ActiveRecord::TestCase
assert_equal m.name, i.man.name, "Name of man should be the same after changes to newly-created-child-owned instance"
end
def test_parent_instance_should_be_shared_within_create_block_of_new_child
man = Man.first
interest = man.interests.build do |i|
assert i.man.equal?(man), "Man of child should be the same instance as a parent"
end
assert interest.man.equal?(man), "Man of the child should still be the same instance as a parent"
end
def test_parent_instance_should_be_shared_within_build_block_of_new_child
man = Man.first
interest = man.interests.build do |i|
assert i.man.equal?(man), "Man of child should be the same instance as a parent"
end
assert interest.man.equal?(man), "Man of the child should still be the same instance as a parent"
end
def test_parent_instance_should_be_shared_with_poked_in_child
m = men(:gordon)
i = Interest.create(:topic => 'Industrial Revolution Re-enactment')