Class: ActiveRecord::Schema
- Defined in:
- 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.column :name, :string, :null => false
end
add_index :authors, :name, :unique
create_table :posts do |t|
t.column :author_id, :integer, :null => false
t.column :subject, :string
t.column :body, :text
t.column :private, :boolean, :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
-
.define(info = {}, &block) ⇒ Object
Eval the given block.
Methods inherited from Migration
announce, down_using_benchmarks, method_missing, migrate, say, say_with_time, singleton_method_added, suppress_messages, up_using_benchmarks, write
Class Method Details
.define(info = {}, &block) ⇒ Object
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 (like the schema’s version):
ActiveRecord::Schema.define(:version => 15) do
...
end
42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 |
# File 'lib/active_record/schema.rb', line 42 def self.define(info={}, &block) instance_eval(&block) unless info.empty? initialize_schema_information cols = columns('schema_info') info = info.map do |k,v| v = Base.connection.quote(v, cols.detect { |c| c.name == k.to_s }) "#{k} = #{v}" end Base.connection.update "UPDATE #{Migrator.schema_info_table_name} SET #{info.join(", ")}" end end |