Sha256: 793a6bc1ba6595afa41ff0f4ae3101aaa6026b2951a6fe43c9750fa7c7df3807

Contents?: true

Size: 1.95 KB

Versions: 3

Compression:

Stored size: 1.95 KB

Contents

module ActiveRecord
  module Persistence
    def relation_for_destroy
      # CPK
      if self.composite?
        relation = self.class.unscoped

        Array(self.class.primary_key).each_with_index do |key, index|
          column     = self.class.columns_hash[key]
          substitute = self.class.connection.substitute_at(column, index)
          relation = relation.where(self.class.arel_table[key].eq(substitute))
          relation.bind_values += [[column, self[key]]]
        end

        relation
      else
        pk         = self.class.primary_key
        column     = self.class.columns_hash[pk]
        substitute = self.class.connection.substitute_at(column, 0)

        relation = self.class.unscoped.where(
          self.class.arel_table[pk].eq(substitute))

        relation.bind_values = [[column, id]]
        relation
      end
    end

    def touch(name = nil)
      raise ActiveRecordError, "cannot touch on a new record object" unless persisted?

      attributes = timestamp_attributes_for_update_in_model
      attributes << name if name

      unless attributes.empty?
        current_time = current_time_from_proper_timezone
        changes = {}

        attributes.each do |column|
          column = column.to_s
          changes[column] = write_attribute(column, current_time)
        end

        changes[self.class.locking_column] = increment_lock if locking_enabled?

        changed_attributes.except!(*changes.keys)

        relation    = self.class.send(:relation)
        arel_table  = self.class.arel_table
        primary_key = self.class.primary_key

        # CPK
        #self.class.unscoped.where(primary_key => self[primary_key]).update_all(changes) == 1
        primary_key_predicate = relation.cpk_id_predicate(arel_table, Array(primary_key), Array(id))
        self.class.unscoped.where(primary_key_predicate).update_all(changes) == 1
      else
        true
      end
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
composite_primary_keys-7.0.16 lib/composite_primary_keys/persistence.rb
composite_primary_keys-7.0.15 lib/composite_primary_keys/persistence.rb
composite_primary_keys-7.0.14 lib/composite_primary_keys/persistence.rb