aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord/test/cases/associations/inverse_associations_test.rb
Commit message (Collapse)AuthorAgeFilesLines
* remove args from assert_nothing_raised in testsTara Scherner de la Fuente2016-02-221-7/+7
|
* Tweaked wording used in some tests.Sebastian McKenzie2015-10-251-4/+4
|
* Fix regression in inverse_of on through associationseileencodes2015-09-261-0/+13
| | | | | | | | | | | | | | | | | | | `inverse_of` on through associations was accidently removed/caused to stop working in commit f8d2899 which was part of a refactoring on `ThroughReflection`. To fix we moved `inverse_of` and `check_validity_of_inverse!` to the `AbstractReflection` so it's available to the `ThroughReflection` without having to dup any methods. We then need to delegate `inverse_name` method in `ThroughReflection`. `inverse_name` can't be moved to `AbstractReflection` without moving methods that set the instance variable `@automatic_inverse_of`. This adds a test that ensures that `inverse_of` on a `ThroughReflection` returns the correct class name, and the correct record for the inverse relationship. Fixes #21692
* Fixed automatic inverse_of for models nested in moduleAndrew McCloud2014-06-151-0/+12
|
* Merge pull request #15343 from dontfidget/fix_polymorphic_automatic_inverse_ofRafael Mendonça França2014-06-131-0/+11
|\ | | | | prevent bad automatic inverse_of association
| * use name specified by 'as' for automatic inverse association to avoid ↵Andrew S. Brown2014-06-101-0/+11
| | | | | | | | reflecting on wrong association
* | Fix inverse associations testLeandro Facchinetti2014-06-041-1/+1
|/ | | | | | `InverseHasManyTests#test_parent_instance_should_be_shared_within_create_block_of_new_child` was mistakenly the same as `InverseHasManyTests#test_parent_instance_should_be_shared_within_build_block_of_new_child`.
* inversed instance should not be reloaded after stale state was changedDmitry Polushkin2013-10-131-0/+12
| | | check at association reader that record is inverted and should not be reloaded because of stale was changed at target record
* add regression test for set_inverse_instance on add_to_targetArthur Neves2013-10-041-0/+13
|
* Fixing multi-word automatic inverse detection.wangjohn2013-08-151-0/+14
| | | | | Currently, ActiveRecord models with multiple words cannot have their inverse associations detected automatically.
* using assert_not instead of refuteRajarshi Das2013-08-131-1/+1
|
* do not load all child records for inverse caseNeeraj Singh2013-06-211-0/+8
| | | | | | | | | | | | | | currently `post.comments.find(Comment.first.id)` would load all comments for the given post to set the inverse association. This has a huge performance penalty. Because if post has 100k records and all these 100k records would be loaded in memory even though the comment id was supplied. Fix is to use in-memory records only if loaded? is true. Otherwise load the records using full sql. Fixes #10509
* fix bad test by making number that fits for integerNeeraj Singh2013-06-211-1/+5
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | PR https://github.com/rails/rails/pull/10566 had to be reverted because after applying the fix test "test_raise_record_not_found_error_when_invalid_ids_are_passed" started failing. In this test invalid_id is being assigned a really large number which was causing following failure when PR #10566 was applied. ``` RangeError: bignum too big to convert into `long long' SELECT `interests`.* FROM `interests` WHERE `interests`.`man_id` = ? AND `interests`.`id` = ? LIMIT 1 [["man_id", 970345987], ["id", 2394823094892348920348523452345]] ``` This test is not failing in master because when test code `man.interests.find(invalid_id)` is executed then interests are fully loaded in memory and no database query is executed. After PR #10566 was merged then test code `man.interests.find(invalid_id)` started executing sql query and hence the error. In case someone is wondering why the second part of query is not failing, then that's because the actual query does not require any variable substituation where the number is large. In that case the sql generate is following. ``` SELECT `interests`.* FROM `interests` WHERE `interests`.`man_id` = ? AND `interests`.`id` IN (8432342, 2390102913, 2453245234523452) [["man_id", 970345987]] ```
* Revert "Merge pull request #10566 from neerajdotname/10509d"Jon Leighton2013-06-191-8/+0
| | | | | | | | | | This reverts commit 2b817a5e89ac0e7aeb894a40ae7151a0cf3cef16, reversing changes made to 353a398bee68c5ea99d76ac7601de0a5fef6f4a5. Conflicts: activerecord/CHANGELOG.md Reason: the build broke
* do not load all child records for inverse caseNeeraj Singh2013-06-191-0/+8
| | | | | | | | | | | | | | currently `post.comments.find(Comment.first.id)` would load all comments for the given post to set the inverse association. This has a huge performance penalty. Because if post has 100k records and all these 100k records would be loaded in memory even though the comment id was supplied. Fix is to use in-memory records only if loaded? is true. Otherwise load the records using full sql. Fixes #10509
* Created a method to automatically find inverse associations and cachewangjohn2013-05-071-0/+82
| | | | | | the results. Added tests to check to make sure that inverse associations are automatically found when has_many, has_one, or belongs_to associations are defined.
* Merge pull request #9996 from mikz/masterJon Leighton2013-04-051-0/+16
|\ | | | | Association with inverse_of does not set the parent in association building block
| * fix inverse_of association in block of new childMichal Cichra2013-04-011-0/+16
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This fixes inconsistency when building children of association which has inverse_of set properly. When creating new association object with a block: parent.association.build do |child| child.parent.equal?(parent) # false end So the block the `child.parent` did not point to the same object. But when the object is created it points to same instance: child = parent.association.build child.parent.equal?(parent) # true
* | Updated the error message for +find+ on an inverse_of associationwangjohn2013-04-011-2/+0
| | | | | | | | | | so that it is consistent with the error thrown for +find+ without an inverse_of association.
* | Throwing a RecordNotFound exception when a record is scanned using thewangjohn2013-04-011-0/+18
|/ | | | | inverse_of option. I've also refactored the code for raising a RecordNotFound exception when searching for records with ids.
* Calling find() on an association with an inverse will now check to seewangjohn2013-03-191-0/+25
| | | | | if the association already holds that record in memory before checking the database for the specified ids.
* Fix issue with collection associations and first(n)/last(n)Carlos Antonio da Silva2012-11-011-0/+13
| | | | | | | | | | | | | | | | | | | | | | | When calling first(n) or last(n) in a collection, Active Record was improperly trying to set the inverse of instance in case that option existed. This change was introduced by fdf4eae506fa9895e831f569bed3c4aa6a999a22. In such cases we don't need to do that "manually", since the way collection will be loaded will already handle that, so we just skip setting the inverse association when any argument is given to first(n)/last(n). The test included ensures that these scenarios will have the inverse of instance set properly. Fixes #8087, Closes #8094. Squashed cherry-pick from d37d40b and c368b66. Conflicts: activerecord/CHANGELOG.md activerecord/lib/active_record/associations/collection_association.rb
* Use inversed parent for first and last child of has_many associationbrainopia2012-08-181-0/+6
|
* Deprecate ActiveRecord::Base.scoped.Jon Leighton2012-07-271-9/+9
| | | | | | | It doesn't serve much purpose now that ActiveRecord::Base.all returns a Relation. The code is moved to active_record_deprecated_finders.
* find and replace deprecated keysJon Leighton2012-04-271-9/+9
|
* %s/find(:\(first\|last\|all\), \([^()]*\))/scoped(\2).\1/gcI amongst other ↵Jon Leighton2012-04-271-9/+9
| | | | things
* remove calls to find(:first), find(:last) and find(:all)Jon Leighton2012-04-261-18/+18
|
* Revert "Deprecate implicit eager loading. Closes #950."Jon Leighton2012-01-161-4/+4
| | | | This reverts commit c99d507fccca2e9e4d12e49b4387e007c5481ae9.
* Deprecate implicit eager loading. Closes #950.Jon Leighton2011-12-291-4/+4
|
* please use ruby -I lib:test path/to/test.rb, or export RUBY_OPTAaron Patterson2011-06-061-1/+1
|
* Refactor Active Record test connection setup. Please see the ↵Jon Leighton2011-06-041-1/+1
| | | | RUNNING_UNIT_TESTS file for details, but essentially you can now configure things in test/config.yml. You can also run tests directly via the command line, e.g. ruby path/to/test.rb (no rake needed, uses default db connection from test/config.yml). This will help us fix the CI by enabling us to isolate the different Rails versions to different databases.
* Split AssociationProxy into an Association class (and subclasses) which ↵Jon Leighton2011-02-181-39/+2
| | | | manages the association, and a CollectionProxy class which is *only* a proxy. Singular associations no longer have a proxy. See CHANGELOG for more.
* Don't not remove double negativesJon Leighton2011-01-071-1/+1
|
* fixing merge errorsAaron Patterson2011-01-041-67/+0
|
* Remove undocumented feature from has_one where you could pass false as the ↵Jon Leighton2011-01-031-7/+7
| | | | | | | | | | | | second parameter to build_assoc or create_assoc, and the existing associated object would be untouched (the foreign key would not be nullified, and it would not be deleted). If you want behaviour similar to this you can do the following things: * Use :dependent => :nullify (or don't specify :dependent) if you want to prevent the existing associated object from being deleted * Use has_many if you actually want multiple associated objects * Explicitly set the foreign key if, for some reason, you really need to have multiple objects associated with the same has_one. E.g. previous = obj.assoc obj.create_assoc previous.update_attributes(:obj_id => obj.id)
* removing unused variablesAaron Patterson2010-11-221-2/+0
|
* removing many unused variablesAaron Patterson2010-11-161-2/+2
|
* Removed warnings when a variable is shadowedŁukasz Strzałkowski2010-07-191-2/+2
|
* Use better assertion methods for testingNeeraj Singh2010-05-191-9/+9
| | | | | | [#4645 state:resolved] Signed-off-by: José Valim <jose.valim@gmail.com>
* Fix pg testJeremy Kemper2009-12-281-1/+2
|
* Make polymorphic_inverse_of in Reflection throw an ↵Murray Steele2009-12-281-2/+15
| | | | | | InverseOfAssociationNotFoundError if the supplied class doesn't have the appropriate association. [#3520 state:resolved] Signed-off-by: Eloy Duran <eloy.de.enige@gmail.com>
* Provide a slightly more robust we_can_set_the_inverse_on_this? method for ↵Murray Steele2009-12-281-1/+16
| | | | | | | | polymorphic belongs_to associations. [#3520 state:resolved] Also add a new test for polymorphic belongs_to that test direct accessor assignment, not just .replace assignment. Signed-off-by: Eloy Duran <eloy.de.enige@gmail.com>
* Add inverse polymorphic association support. [#3520 state:resolved]George Ogata2009-12-281-19/+81
| | | | Signed-off-by: Eloy Duran <eloy.de.enige@gmail.com>
* Add more tests for the various ways we can assign objects to associations. ↵Murray Steele2009-12-281-11/+159
| | | | | | | | [#3513 state:resolved] Get rid of a duplicate set_inverse_instance call if you use new_record(true) (e.g. you want to replace the existing instance). Signed-off-by: Eloy Duran <eloy.de.enige@gmail.com>
* Set inverse for #replace on a has_one association. [#3513 state:resolved]George Ogata2009-12-281-0/+15
| | | | Signed-off-by: Eloy Duran <eloy.de.enige@gmail.com>
* honour :inverse_of for joins based includeFrederick Cheung2009-05-101-0/+28
| | | | Signed-off-by: Michael Koziarski <michael@koziarski.com>
* honour inverse_of when preloading associationsFrederick Cheung2009-05-101-0/+33
| | | | Signed-off-by: Michael Koziarski <michael@koziarski.com>
* Providing support for :inverse_of as an option to associations.Murray Steele2009-05-041-0/+252
You can now add an :inverse_of option to has_one, has_many and belongs_to associations. This is best described with an example: class Man < ActiveRecord::Base has_one :face, :inverse_of => :man end class Face < ActiveRecord::Base belongs_to :man, :inverse_of => :face end m = Man.first f = m.face Without :inverse_of m and f.man would be different instances of the same object (f.man being pulled from the database again). With these new :inverse_of options m and f.man are the same in memory instance. Currently :inverse_of supports has_one and has_many (but not the :through variants) associations. It also supplies inverse support for belongs_to associations where the inverse is a has_one and it's not a polymorphic. Signed-off-by: Murray Steele <muz@h-lame.com> Signed-off-by: Jeremy Kemper <jeremy@bitsweat.net>