class CreateActiveStorageTables

Public Instance Methods

# File activestorage/db/migrate/20170806125915_create_active_storage_tables.rb, line 2
def change
  # Use Active Record's configured type for primary and foreign keys
  primary_key_type, foreign_key_type = primary_and_foreign_key_types

  create_table :active_storage_blobs, id: primary_key_type do |t|
    t.string   :key,          null: false
    t.string   :filename,     null: false
    t.string   :content_type
    t.text     :metadata
    t.string   :service_name, null: false
    t.bigint   :byte_size,    null: false
    t.string   :checksum

    if connection.supports_datetime_with_precision?
      t.datetime :created_at, precision: 6, null: false
    else
      t.datetime :created_at, null: false
    end

    t.index [ :key ], unique: true
  end

  create_table :active_storage_attachments, id: primary_key_type do |t|
    t.string     :name,     null: false
    t.references :record,   null: false, polymorphic: true, index: false, type: foreign_key_type
    t.references :blob,     null: false, type: foreign_key_type

    if connection.supports_datetime_with_precision?
      t.datetime :created_at, precision: 6, null: false
    else
      t.datetime :created_at, null: false
    end

    t.index [ :record_type, :record_id, :name, :blob_id ], name: :index_active_storage_attachments_uniqueness, unique: true
    t.foreign_key :active_storage_blobs, column: :blob_id
  end

  create_table :active_storage_variant_records, id: primary_key_type do |t|
    t.belongs_to :blob, null: false, index: false, type: foreign_key_type
    t.string :variation_digest, null: false

    t.index [ :blob_id, :variation_digest ], name: :index_active_storage_variant_records_uniqueness, unique: true
    t.foreign_key :active_storage_blobs, column: :blob_id
  end
end