Method: ActiveRecord::Acts::Versioned::Behaviors::ClassMethods#create_versioned_table

Defined in:
lib/acts_as_versioned/lib/acts_as_versioned.rb

#create_versioned_table(create_table_options = {}) ⇒ Object

Rake migration task to create the versioned table using options passed to acts_as_versioned



415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
# File 'lib/acts_as_versioned/lib/acts_as_versioned.rb', line 415

def create_versioned_table(create_table_options = {})
  # create version column in main table if it does not exist
  if !self.content_columns.find { |c| [version_column.to_s, 'lock_version'].include? c.name }
    self.connection.add_column table_name, version_column, :integer
    self.reset_column_information
  end

  return if connection.table_exists?(versioned_table_name)

  self.connection.create_table(versioned_table_name, create_table_options) do |t|
    t.column versioned_foreign_key, :integer
    t.column version_column, :integer
  end

  self.versioned_columns.each do |col|
    self.connection.add_column versioned_table_name, col.name, col.type,
                               :limit     => col.limit,
                               :default   => col.default,
                               :scale     => col.scale,
                               :precision => col.precision
  end

  if type_col = self.columns_hash[inheritance_column]
    self.connection.add_column versioned_table_name, versioned_inheritance_column, type_col.type,
                               :limit     => type_col.limit,
                               :default   => type_col.default,
                               :scale     => type_col.scale,
                               :precision => type_col.precision
  end

  self.connection.add_index versioned_table_name, versioned_foreign_key
end