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

Changeset 9159

Show
Ignore:
Timestamp:
03/31/08 01:49:57 (5 months ago)
Author:
bitsweat
Message:

Partial updates play nice with updated_at/on timestamps

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/activerecord/lib/active_record.rb

    r9127 r9159  
    6363  include ActiveRecord::Locking::Optimistic 
    6464  include ActiveRecord::Locking::Pessimistic 
     65  include ActiveRecord::AttributeMethods 
     66  include ActiveRecord::Dirty 
    6567  include ActiveRecord::Callbacks 
    6668  include ActiveRecord::Observing 
     
    7476  include ActiveRecord::Calculations 
    7577  include ActiveRecord::Serialization 
    76   include ActiveRecord::AttributeMethods 
    77   include ActiveRecord::Dirty 
    7878end 
    7979 
  • trunk/activerecord/lib/active_record/timestamp.rb

    r9157 r9159  
    3131 
    3232      def update_with_timestamps(*args) #:nodoc: 
    33         if record_timestamps 
     33        if record_timestamps && (!partial_updates? || changed?) 
    3434          t = self.class.default_timezone == :utc ? Time.now.utc : Time.now 
    3535          write_attribute('updated_at', t) if respond_to?(:updated_at) 
  • trunk/activerecord/test/cases/dirty_test.rb

    r9157 r9159  
    100100  def test_partial_update 
    101101    pirate = Pirate.new(:catchphrase => 'foo') 
     102    old_updated_on = 1.hour.ago.beginning_of_day 
    102103 
    103104    with_partial_updates Pirate, false do 
    104105      assert_queries(2) { 2.times { pirate.save! } } 
     106      Pirate.update_all({ :updated_on => old_updated_on }, :id => pirate.id) 
    105107    end 
    106108 
    107109    with_partial_updates Pirate, true do 
    108110      assert_queries(0) { 2.times { pirate.save! } } 
     111      assert_equal old_updated_on, pirate.reload.updated_on 
     112 
     113      assert_queries(1) { pirate.catchphrase = 'bar'; pirate.save! } 
     114      assert_not_equal old_updated_on, pirate.reload.updated_on 
    109115    end 
    110116  end