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

Ticket #6822: has_many_after_update_callback_should_not_unnecessarily_load_association.diff

File has_many_after_update_callback_should_not_unnecessarily_load_association.diff, 2.2 kB (added by canadaduane, 2 years ago)
  • activerecord/test/associations/callbacks_test.rb

    old new  
    122122                    "after_adding#{david.id}"], activerecord.developers_log 
    123123    end 
    124124  end 
     125   
     126  def test_has_many_after_update_callback_does_not_unnecessarily_load_association 
     127    david = authors(:david) 
     128    david.posts.create 
     129    assert !david.posts.loaded? 
     130    david.save 
     131    assert !david.posts.loaded? 
     132  end 
    125133end 
    126134 
  • activerecord/lib/active_record/associations.rb

    old new  
    958958            if association.respond_to?(:loaded?) 
    959959              if new_record? 
    960960                association 
     961              elsif association.loaded? 
     962                association.select { |record| record.new_record? } 
    961963              else 
    962                 association.select { |record| record.new_record? } 
     964                [] 
    963965              end.each do |record| 
    964966                errors.add "#{association_name}" unless record.valid? 
    965967              end 
     
    973975            association = instance_variable_get("@#{association_name}") 
    974976             
    975977            if association.respond_to?(:loaded?) 
    976               if @new_record_before_save 
    977                 records_to_save = association 
    978               else 
    979                 records_to_save = association.select { |record| record.new_record? } 
    980               end 
     978              records_to_save = 
     979                if @new_record_before_save 
     980                  association 
     981                elsif association.loaded? 
     982                  association.select { |record| record.new_record? } 
     983                else 
     984                  [] 
     985                end 
    981986              records_to_save.each { |record| association.send(:insert_record, record) } 
    982987              association.send(:construct_sql)   # reconstruct the SQL queries now that we know the owner's id 
    983988            end