Миграция - файл, обеспечивающий последовательные изменения в БД и ее формирование. В файле миграции в стандартном для ROR виде описана структура создаваемой таблицы в БД или изменения, которые необходимо произвести в уже существующих таблицах.
Файлы миграции имеют уникальное имя, благодаря штампу системного времени в имени файла. Это позволяет следить за тем, какие миграции уже были выполнены, а какие не выполнены. В БД существует таблица migrations в которую при выполнении каждой миграции заносится штамп времени каждой миграции.
Благодаря файлам миграции мы можем быть уверены, что другой разработчик не добавил в БД поле, которое может нарушить структуру нашей БД или привести ее в негодность. Вся работа с БД (создание, формирование, изменение, удаление таблиц) проводится исключительно через миграции.
Пример файла миграции:
class CreateRoles < ActiveRecord::Migration
def self.up
create_table :roles do |t|
t.string :name # Английское имя роли
t.string :title # Название Роли
t.text :description # Текстовое описание Роли
t.text :settings # Настройки Роли
t.timestamps
end
end
def self.down
drop_table :roles
end
end
Представленная миграция создает в БД таблицу roles, поскольку в ее миграции указано create_table :roles.
В таблице roles будут созданы поля соответствующих типов.
string => VARCHAR(250)
text => TEXT
timestamps => это сокращенное обозначение 2х полей со значением времени (created_at, updated_at)
Обратим внимание на указание параметров в виде :name, :description, :settings
Символ двоеточия обозначает специальный тип данных в RUBY - СИМВОЛ (SYMBOL)
Символ - это полнейший аналог строки, за некоторыми очень тонкими особенностями хранения символов в оперативной памяти. Исходя из того, что Символ это аналог Строки, то приведенная выше миграции могла выглядеть так:
class CreateRoles < ActiveRecord::Migration
def self.up
create_table 'roles' do |t|
t.string 'name' # Английское имя роли
t.string 'title' # Название Роли
t.text 'description' # Текстовое описание Роли
t.text 'settings' # Настройки Роли
t.timestamps
end
end
def self.down
drop_table 'roles'
end
end
Однако я уверен, что будет очень трудно не согласится, что набрать один символ : проще, а главное БЫСТРЕЕ, чем набрать две кавычки и перевести каретку для набора строки внутри кавычек. Именно во многом из-за скорости РУБИ программисты так любят СИМВОЛЫ.