Module | ActiveRecord::ConnectionAdapters::SchemaStatements |
In: |
lib/active_record/connection_adapters/abstract/schema_statements.rb
|
Adds a new column to the named table. See TableDefinition#column for details of the options you can use.
Adds a new index to the table. column_name can be a single Symbol, or an Array of Symbols.
The index will be named after the table and the first column names, unless you pass +:name+ as an option.
When creating an index on multiple columns, the first column is used as a name for the index. For example, when you specify an index on two columns [+:first+, +:last+], the DBMS creates an index for both columns as well as an index for the first colum +:first+. Using just the first name for this index makes sense, because you will never have to create a singular index with this name.
add_index(:suppliers, :name)
generates
CREATE INDEX suppliers_name_index ON suppliers(name)
add_index(:accounts, [:branch_id, :party_id], :unique => true)
generates
CREATE UNIQUE INDEX accounts_branch_id_index ON accounts(branch_id, party_id)
add_index(:accounts, [:branch_id, :party_id], :unique => true, :name => 'by_branch_party')
generates
CREATE UNIQUE INDEX by_branch_party ON accounts(branch_id, party_id)
Changes the column’s definition according to the new options. See TableDefinition#column for details of the options you can use.
change_column(:suppliers, :name, :string, :limit => 80) change_column(:accounts, :description, :text)
Sets a new default value for a column. If you want to set the default value to NULL, you are out of luck. You need to DatabaseStatements#execute the apppropriate SQL statement yourself.
change_column_default(:suppliers, :qualification, 'new') change_column_default(:accounts, :authorized, 1)
Returns an array of Column objects for the table specified by table_name. See the concrete implementation for details on the expected parameter values.
Creates a new table There are two ways to work with create_table. You can use the block form or the regular form, like this:
# create_table() yields a TableDefinition instance create_table(:suppliers) do |t| t.column :name, :string, :limit => 60 # Other fields here end
create_table(:suppliers) add_column(:suppliers, :name, :string, {:limit => 60})
The options hash can include the following keys:
create_table(:suppliers, :options => 'ENGINE=InnoDB DEFAULT CHARSET=utf8')
generates:
CREATE TABLE suppliers ( id int(11) DEFAULT NULL auto_increment PRIMARY KEY ) ENGINE=InnoDB DEFAULT CHARSET=utf8
create_table(:objects, :primary_key => 'guid') do |t| t.column :name, :string, :limit => 80 end
generates:
CREATE TABLE objects ( guid int(11) DEFAULT NULL auto_increment PRIMARY KEY, name varchar(80) )
create_table(:categories_suppliers, :id => false) do |t| t.column :category_id, :integer t.column :supplier_id, :integer end
generates:
CREATE TABLE categories_suppliers_join ( category_id int, supplier_id int )
See also TableDefinition#column for details on how to create columns.
Should not be called normally, but this operation is non-destructive. The migrations module handles this automatically.
Returns a Hash of mappings from the abstract data types to the native database types. See TableDefinition#column for details on the recognized abstract data types.
Remove the given index from the table.
Remove the suppliers_name_index in the suppliers table (legacy support, use the second or third forms).
remove_index :suppliers, :name
Remove the index named accounts_branch_id in the accounts table.
remove_index :accounts, :column => :branch_id
Remove the index named by_branch_party in the accounts table.
remove_index :accounts, :name => :by_branch_party
You can remove an index on multiple columns by specifying the first column.
add_index :accounts, [:username, :password] remove_index :accounts, :username