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:
commit
685cf144a9
3 changed files with 34 additions and 0 deletions
|
@ -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) ##
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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')
|
||||
|
|
Loading…
Reference in a new issue