Uma migração é um conjunto de instrução para o banco de dados, escrito em Ruby. Elas servem para "migrar" o banco de dados de um estado para outro.
As intruções vão para cima e para baixo ou seja, é possivel ir para frente um estado e depois se necessario, voltar para o estado anterior.
Ao fazer migrações, uma copia do atual esquema do banco de dados é guardado no arquivo app/db/schema.rb
$ rails generate migration initial_infos
O comando ira gerar um arquivo na pasta app/db/migrate
.
$ rails generate model User
O comando ira gerar um arquivo chamado "create_users" na pasta app/db/migrate
.
Se você está criando uma migração para outros propositos (como por exemplo adicionando um campo a uma tabela já existente), é possivel usar o seguinte gerador:
$ rails generate migration AddPartNumberToProducts part_number:string
Para esse comando funcionar é preciso usar o formato AddXXXToYYY
ou RemoveXXXFromYYY
junto com uma lista dos nomes das colunas e seus formatos.
references :user
)class CreateUsers < ActiveRecord::Migration
def self.up
create_table :users do |t|
t.string "first_name", :limit => 25
t.string "last_name", :limit => 50
t.string "email", :default => "", :null => false
t.string "password", :limit => 40
t.timestamps
end
end
def self.down
drop_table :users
end
end
$ rake db:migrate
Ao executar o comando, o rails vai rodar todas as migrações que ainda não foram executadas.
É possivel escolher em qual "Enviorment" a migração vai rodar adicionando a variavel RAILS_ENV=
e adicionar o nome do ambiente (production, development, testing). O default é sempre o development.
$ rake db:migrate VERSION=0
Esse comando vai reverter as migrações para a primeira versão, apagando a tabela no banco de dados.
Também é possivel reverter para uma versão intermediaria utilizando o número no começo do nome do arquivo da migração.
create_table(table, options) do |t|
drop_table(table)
rename_table(table, new_name)
add_column(table, column, type, options)
remove_column(table, column)
rename_column(table, column, new_name)
change_column(table, column, type, options)
add_index(table, column, options)
remove_index(table,column)
execute("any SQL string")
Para resetar o banco de dados e recriar as migrações:
rake db:reset
rake db:migrate
Para deletar o banco de dados, criar um novo e rodar as migrações:
rake db:drop
rake db:create
rake db:migrate