Class: ActiveRecord::Schema

Inherits:
Migration show all
Defined in:
activerecord/lib/active_record/schema.rb

Overview

Allows programmers to programmatically define a schema in a portable DSL. This means you can define tables, indexes, etc. without using SQL directly, so your applications can more easily support multiple databases.

Usage:

ActiveRecord::Schema.define do
  create_table :authors do |t|
    t.string :name, :null => false
  end

  add_index :authors, :name, :unique

  create_table :posts do |t|
    t.integer :author_id, :null => false
    t.string :subject
    t.text :body
    t.boolean :private, :default => false
  end

  add_index :posts, :author_id
end

ActiveRecord::Schema is only supported by database adapters that also support migrations, the two features being very similar.

Class Method Summary (collapse)

Methods inherited from Migration

announce, connection, down_with_benchmarks, method_missing, migrate, say, say_with_time, singleton_method_added, suppress_messages, up_with_benchmarks, write

Class Method Details

+ (Object) define(info = {}, &block)

Eval the given block. All methods available to the current connection adapter are available within the block, so you can easily use the database definition DSL to build up your schema (create_table, add_index, etc.).

The info hash is optional, and if given is used to define metadata about the current schema (currently, only the schema's version):

ActiveRecord::Schema.define(:version => 20380119000001) do
  ...
end


46
47
48
49
50
51
52
53
# File 'activerecord/lib/active_record/schema.rb', line 46

def self.define(info={}, &block)
  instance_eval(&block)

  unless info[:version].blank?
    initialize_schema_migrations_table
    assume_migrated_upto_version(info[:version], migrations_path)
  end
end

+ (Object) migrations_path



31
32
33
# File 'activerecord/lib/active_record/schema.rb', line 31

def self.migrations_path
  ActiveRecord::Migrator.migrations_path
end