Sha256: 7416d6369124d96e2d3277ef63559bfa0b2b5998bcb44ee24914c222fd68ca4a

Contents?: true

Size: 1.11 KB

Versions: 13

Compression:

Stored size: 1.11 KB

Contents

module ActiveRecord # :nodoc:
  class Base # :nodoc:
      
    # Synchronizes the passed in ActiveRecord instances with data
    # from the database. This is like calling reload
    # on an individual ActiveRecord instance but it is intended for use on
    # multiple instances. 
    #
    # This uses one query for all instance updates and then updates existing
    # instances rather sending one query for each instance
    def self.synchronize(instances, key=self.primary_key)
      return if instances.empty?
      
      keys = instances.map(&"#{key}".to_sym)
      klass = instances.first.class
      fresh_instances = klass.find( :all, :conditions=>{ key=>keys }, :order=>"#{key} ASC" )

      instances.each_with_index do |instance, index|
        instance.clear_aggregation_cache
        instance.clear_association_cache
        instance.instance_variable_set '@attributes', fresh_instances[index].attributes
      end
    end

    # See ActiveRecord::ConnectionAdapters::AbstractAdapter.synchronize
    def synchronize(instances, key=ActiveRecord::Base.primary_key)
      self.class.synchronize(instances, key)
    end
  end
end

Version data entries

13 entries across 13 versions & 5 rubygems

Version Path
jorahood-ar-extensions-0.9.2.3 lib/ar-extensions/synchronize.rb
wunderbread-ar-extensions-0.8.3 lib/ar-extensions/synchronize.rb
ghazel-ar-extensions-0.9.3.2 lib/ar-extensions/synchronize.rb
ghazel-ar-extensions-0.9.3.1 lib/ar-extensions/synchronize.rb
ghazel-ar-extensions-0.9.3 lib/ar-extensions/synchronize.rb
ar-extensions-0.9.3 lib/ar-extensions/synchronize.rb
Empact-ar-extensions-0.9.2 lib/ar-extensions/synchronize.rb
ar-extensions-0.9.2 lib/ar-extensions/synchronize.rb
ar-extensions-0.8.0 lib/ar-extensions/synchronize.rb
ar-extensions-0.9.1 lib/ar-extensions/synchronize.rb
ar-extensions-0.9.0 lib/ar-extensions/synchronize.rb
ar-extensions-0.8.1 lib/ar-extensions/synchronize.rb
ar-extensions-0.8.2 lib/ar-extensions/synchronize.rb