diff options
author | Carlos Antonio da Silva <carlosantoniodasilva@gmail.com> | 2012-11-01 14:27:45 -0200 |
---|---|---|
committer | Carlos Antonio da Silva <carlosantoniodasilva@gmail.com> | 2012-11-01 14:27:57 -0200 |
commit | c368b660be2433e291a2c87b3eb3de3dfac397ef (patch) | |
tree | a10d3df18ce149e294c5f1b221999fd8b625c7b9 /activerecord | |
parent | d37d40b2d702e9ff1461a3571f7f4d7ec52c2a2a (diff) | |
download | rails-c368b660be2433e291a2c87b3eb3de3dfac397ef.tar.gz rails-c368b660be2433e291a2c87b3eb3de3dfac397ef.tar.bz2 rails-c368b660be2433e291a2c87b3eb3de3dfac397ef.zip |
Ensure calling first/last with options correctly set inverse association
Also related to #8087. Thanks @al2o3cr.
Diffstat (limited to 'activerecord')
-rw-r--r-- | activerecord/lib/active_record/associations/collection_association.rb | 4 | ||||
-rw-r--r-- | activerecord/test/cases/associations/inverse_associations_test.rb | 8 |
2 files changed, 11 insertions, 1 deletions
diff --git a/activerecord/lib/active_record/associations/collection_association.rb b/activerecord/lib/active_record/associations/collection_association.rb index 43701708a4..65e882867e 100644 --- a/activerecord/lib/active_record/associations/collection_association.rb +++ b/activerecord/lib/active_record/associations/collection_association.rb @@ -571,7 +571,9 @@ module ActiveRecord args.shift if args.first.is_a?(Hash) && args.first.empty? collection = fetch_first_or_last_using_find?(args) ? scoped : load_target - collection.send(type, *args).tap { |it| set_inverse_instance it if args.blank? } + collection.send(type, *args).tap do |record| + set_inverse_instance record if record.is_a? ActiveRecord::Base + end end end end diff --git a/activerecord/test/cases/associations/inverse_associations_test.rb b/activerecord/test/cases/associations/inverse_associations_test.rb index 533192ea0e..0cab6faa25 100644 --- a/activerecord/test/cases/associations/inverse_associations_test.rb +++ b/activerecord/test/cases/associations/inverse_associations_test.rb @@ -261,10 +261,18 @@ class InverseHasManyTests < ActiveRecord::TestCase def test_parent_instance_should_be_shared_with_first_and_last_child man = Man.first + assert man.interests.first.man.equal? man assert man.interests.last.man.equal? man end + def test_parent_instance_should_be_shared_with_first_and_last_child_when_given_options + man = Man.first + + assert man.interests.first(:order => 'topic').man.equal? man + assert man.interests.last(:order => 'topic').man.equal? man + end + def test_parent_instance_should_be_shared_with_first_n_and_last_n_children man = Man.first |