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

Ticket #3692: habtm_create.patch.diff

File habtm_create.patch.diff, 2.7 kB (added by josh@hasmanythrough.com, 2 years ago)

Patch corrects habtm.create, with more extensive test cases

  • activerecord/test/associations_test.rb

    old new  
    13541354    devel.save 
    13551355    assert !proj.new_record? 
    13561356    assert_equal devel.projects.last, proj 
     1357    assert_equal Developer.find(1).projects.last, proj  # prove join table is updated 
    13571358  end 
    13581359   
     1360  def test_build_by_new_record 
     1361    devel = Developer.new(:name => "Marcel", :salary => 75000) 
     1362    proj1 = devel.projects.build(:name => "Make bed") 
     1363    proj2 = devel.projects.build(:name => "Lie in it") 
     1364    assert_equal devel.projects.last, proj2 
     1365    assert proj2.new_record? 
     1366    devel.save 
     1367    assert !devel.new_record? 
     1368    assert !proj2.new_record? 
     1369    assert_equal devel.projects.last, proj2 
     1370    assert_equal Developer.find_by_name("Marcel").projects.last, proj2  # prove join table is updated 
     1371  end 
     1372   
    13591373  def test_create 
    13601374    devel = Developer.find(1) 
    13611375    proj = devel.projects.create("name" => "Projekt") 
    13621376    assert_equal devel.projects.last, proj 
    13631377    assert !proj.new_record? 
     1378    assert_equal Developer.find(1).projects.last, proj  # prove join table is updated 
    13641379  end 
    13651380   
     1381  def test_create_by_new_record 
     1382    devel = Developer.new(:name => "Marcel", :salary => 75000) 
     1383    proj1 = devel.projects.create(:name => "Make bed") 
     1384    proj2 = devel.projects.create(:name => "Lie in it") 
     1385    assert_equal devel.projects.last, proj2 
     1386    assert proj2.new_record? 
     1387    devel.save 
     1388    assert !devel.new_record? 
     1389    assert !proj2.new_record? 
     1390    assert_equal devel.projects.last, proj2 
     1391    assert_equal Developer.find_by_name("Marcel").projects.last, proj2  # prove join table is updated 
     1392  end 
     1393   
    13661394  def test_uniq_after_the_fact 
    13671395    developers(:jamis).projects << projects(:active_record) 
    13681396    developers(:jamis).projects << projects(:active_record) 
  • activerecord/lib/active_record/associations/has_and_belongs_to_many_association.rb

    old new  
    1313        record 
    1414      end 
    1515 
     16      def create(attributes = {}) 
     17        # Can't use Base.create since the foreign key may be a protected attribute. 
     18        if attributes.is_a?(Array) 
     19          attributes.collect { |attr| create(attr) } 
     20        else 
     21          record = build(attributes) 
     22          insert_record(record) unless @owner.new_record? 
     23          record 
     24        end 
     25      end 
     26 
    1627      def find_first 
    1728        load_target.first 
    1829      end