Changeset 9200
- Timestamp:
- 04/01/08 18:27:22 (3 months ago)
- Files:
-
- trunk/activerecord/CHANGELOG (modified) (1 diff)
- trunk/activerecord/lib/active_record/associations/association_collection.rb (modified) (1 diff)
- trunk/activerecord/lib/active_record/associations/has_many_through_association.rb (modified) (1 diff)
- trunk/activerecord/test/cases/associations_test.rb (modified) (2 diffs)
- trunk/activerecord/test/cases/associations/join_model_test.rb (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/activerecord/CHANGELOG
r9182 r9200 1 1 *SVN* 2 3 * Add efficient #include? to AssociationCollection (for has_many/has_many :through/habtm). [stopdropandrew] 2 4 3 5 * PostgreSQL: create_ and drop_database support. #9042 [ez, pedz, nicksieger] trunk/activerecord/lib/active_record/associations/association_collection.rb
r9084 r9200 160 160 end 161 161 162 def include?(record) 163 return false unless record.is_a?(@reflection.klass) 164 return @target.include?(record) if loaded? 165 exists?(record) 166 end 162 167 163 168 protected trunk/activerecord/lib/active_record/associations/has_many_through_association.rb
r9110 r9200 1 1 module ActiveRecord 2 2 module Associations 3 class HasManyThroughAssociation < Association Proxy#:nodoc:3 class HasManyThroughAssociation < AssociationCollection #:nodoc: 4 4 def initialize(owner, reflection) 5 5 super trunk/activerecord/test/cases/associations_test.rb
r9157 r9200 1331 1331 end 1332 1332 1333 def test_include_uses_array_include_after_loaded 1334 firm = companies(:first_firm) 1335 client = firm.clients.first 1336 1337 assert_no_queries do 1338 assert firm.clients.loaded? 1339 assert firm.clients.include?(client) 1340 end 1341 end 1342 1343 def test_include_checks_if_record_exists_if_target_not_loaded 1344 firm = companies(:first_firm) 1345 client = firm.clients.first 1346 1347 firm.reload 1348 assert ! firm.clients.loaded? 1349 assert_queries(1) do 1350 assert firm.clients.include?(client) 1351 end 1352 assert ! firm.clients.loaded? 1353 end 1354 1355 def test_include_returns_false_for_non_matching_record_to_verify_scoping 1356 firm = companies(:first_firm) 1357 client = Client.create!(:name => 'Not Associated') 1358 1359 assert ! firm.clients.loaded? 1360 assert ! firm.clients.include?(client) 1361 end 1362 1333 1363 end 1334 1364 … … 2047 2077 end 2048 2078 2079 def test_include_uses_array_include_after_loaded 2080 project = projects(:active_record) 2081 developer = project.developers.first 2082 2083 assert_no_queries do 2084 assert project.developers.loaded? 2085 assert project.developers.include?(developer) 2086 end 2087 end 2088 2089 def test_include_checks_if_record_exists_if_target_not_loaded 2090 project = projects(:active_record) 2091 developer = project.developers.first 2092 2093 project.reload 2094 assert ! project.developers.loaded? 2095 assert_queries(1) do 2096 assert project.developers.include?(developer) 2097 end 2098 assert ! project.developers.loaded? 2099 end 2100 2101 def test_include_returns_false_for_non_matching_record_to_verify_scoping 2102 project = projects(:active_record) 2103 developer = Developer.create :name => "Bryan", :salary => 50_000 2104 2105 assert ! project.developers.loaded? 2106 assert ! project.developers.include?(developer) 2107 end 2108 2049 2109 def test_find_in_association_with_custom_finder_sql 2050 2110 assert_equal developers(:david), projects(:active_record).developers_with_finder_sql.find(developers(:david).id), "SQL find" trunk/activerecord/test/cases/associations/join_model_test.rb
r9096 r9200 640 640 end 641 641 end 642 643 def test_has_many_through_include_uses_array_include_after_loaded 644 david = authors(:david) 645 category = david.categories.first 646 647 assert_no_queries do 648 assert david.categories.loaded? 649 assert david.categories.include?(category) 650 end 651 end 652 653 def test_has_many_through_include_checks_if_record_exists_if_target_not_loaded 654 david = authors(:david) 655 category = david.categories.first 656 657 david.reload 658 assert ! david.categories.loaded? 659 assert_queries(1) do 660 assert david.categories.include?(category) 661 end 662 assert ! david.categories.loaded? 663 end 642 664 665 def test_has_many_through_include_returns_false_for_non_matching_record_to_verify_scoping 666 david = authors(:david) 667 category = Category.create!(:name => 'Not Associated') 668 669 assert ! david.categories.loaded? 670 assert ! david.categories.include?(category) 671 end 672 643 673 private 644 674 # create dynamic Post models to allow different dependency options