Ruby on Rails | Screencasts | Download | Documentation | Weblog | Community | Source

Ticket #2917: habtm-singular-id-get-method.patch

File habtm-singular-id-get-method.patch, 1.7 kB (added by François Beausoleil <francois.beausoleil@gmail.com>, 4 years ago)

Tests and implementation to add "collection_singular_ids" query method to habtm relationships

  • activerecord/test/associations_test.rb

    old new  
    13721372    assert !developer.special_projects.include?(other_project) 
    13731373  end 
    13741374 
     1375  def test_returns_collection_of_ids 
     1376    francois = Developer.new("name" => "Francois") 
     1377    francois.projects.concat([Project.find(1), Project.find(2)]) 
     1378    francois.save 
     1379 
     1380    assert_equal 2, francois.project_ids.size 
     1381    assert francois.project_ids.include?(Project.find(1).id) 
     1382    assert francois.project_ids.include?(Project.find(2).id) 
     1383  end 
     1384 
     1385  def test_assign_through_collection_of_ids 
     1386    francois = Developer.new("name" => "Francois") 
     1387    francois.project_ids = [Project.find(1).id, Project.find(2).id] 
     1388    francois.save 
     1389    francois.reload 
     1390 
     1391    assert_equal 2, francois.projects.size 
     1392    assert francois.projects.include?(Project.find(1)) 
     1393    assert francois.projects.include?(Project.find(2)) 
     1394  end 
    13751395end 
  • activerecord/lib/active_record/associations.rb

    old new  
    753753            association 
    754754          end 
    755755 
     756          define_method("#{Inflector.singularize(association_name)}_ids") do 
     757            send("#{association_name}").map {|entry| entry.id} 
     758          end 
     759 
    756760          define_method("#{Inflector.singularize(association_name)}_ids=") do |new_value| 
    757761            send("#{association_name}=", association_class_name.constantize.find(new_value)) 
    758762          end