Ruby on Rails - Миграции
Rails Migration позволяет вам использовать Ruby для определения изменений в схеме вашей базы данных, что позволяет использовать систему управления версиями для синхронизации вещей с реальным кодом.
Это имеет много применений, в том числе -
Teams of developers - Если один человек вносит изменения в схему, другим разработчикам нужно просто обновить и запустить «rake migrate».
Production servers - Запустите "rake migrate" при развертывании нового выпуска, чтобы также обновить базу данных.
Multiple machines - Если вы разрабатываете и на настольном компьютере, и на ноутбуке, или в нескольких местах, миграции могут помочь вам синхронизировать их все.
Что может сделать миграция на Rails?
- create_table (имя, параметры)
- drop_table(name)
- rename_table (старое_имя, новое_имя)
- add_column (имя_таблицы, имя_столбца, тип, параметры)
- rename_column (имя_таблицы, имя_столбца, имя_нового_столбца)
- change_column (имя_таблицы, имя_столбца, тип, параметры)
- remove_column (имя_таблицы, имя_столбца)
- add_index (имя_таблицы, имя_столбца, тип_индекса)
- remove_index (имя_таблицы, имя_столбца)
Migrations support all the basic data types - Ниже приводится список типов данных, которые поддерживает миграция.
string - для небольших типов данных, таких как заголовок.
text - для более длинных текстовых данных, таких как описание.
integer - для целых чисел.
float - для десятичных знаков.
datetime and timestamp - сохранить дату и время в столбце.
date and time - сохранять только дату или только время.
binary - для хранения таких данных, как изображения, аудио или фильмы.
Boolean - для хранения истинных или ложных значений.
Valid column options are - Ниже приведен список допустимых параметров столбца.
limit (: limit => «50»)
default (: по умолчанию => «бла»)
null(: null => false подразумевает НЕ NULL )
NOTE - Действия, выполняемые Rails Migration, могут выполняться с использованием любого внешнего графического интерфейса или непосредственно в приглашении SQL, но Rails Migration упрощает все эти действия.
Подробнее об этом см. В Rails API .
Создайте миграции
Вот общий синтаксис для создания миграции -
application_dir> rails generate migration table_name
Это создаст файл db / migrate / 001_table_name.rb. Файл миграции содержит базовый синтаксис Ruby, описывающий структуру данных таблицы базы данных.
NOTE - Перед запуском генератора миграции рекомендуется очистить существующие миграции, созданные генераторами моделей.
Мы создадим две миграции, соответствующие нашим трем таблицам - books and subjects.
Перенос книг должен быть следующим -
tp> cd library
library> rails generate migration books
Вышеупомянутая команда генерирует следующий код.
тема миграции должна быть следующей -
tp> cd library
library> rails generate migration subjects
Вышеупомянутая команда генерирует следующий код.
Обратите внимание, что вы используете строчные буквы для книги и темы и во множественном числе при создании миграций. Это парадигма Rails, которой вы должны следовать каждый раз при создании миграции.
Редактировать код
Перейдите в подкаталог db / migrate вашего приложения и отредактируйте каждый файл один за другим с помощью любого простого текстового редактора.
Измените 001_books.rb следующим образом -
Столбец ID будет создан автоматически, так что не делайте этого и здесь.
class Books < ActiveRecord::Migration
def self.up
create_table :books do |t|
t.column :title, :string, :limit => 32, :null => false
t.column :price, :float
t.column :subject_id, :integer
t.column :description, :text
t.column :created_at, :timestamp
end
end
def self.down
drop_table :books
end
end
Метод self.up используется при переходе на новую версию, self.downиспользуется для отката любых изменений, если это необходимо. В этот момент приведенный выше сценарий будет использоваться для созданияbooks стол.
Измените 002_subjects.rb следующим образом -
class Subjects < ActiveRecord::Migration
def self.up
create_table :subjects do |t|
t.column :name, :string
end
Subject.create :name => "Physics"
Subject.create :name => "Mathematics"
Subject.create :name => "Chemistry"
Subject.create :name => "Psychology"
Subject.create :name => "Geography"
end
def self.down
drop_table :subjects
end
end
Вышеупомянутый сценарий будет использоваться для создания subjects table и создаст пять записей в таблице субъектов.
Запустите миграцию
Теперь, когда вы создали все необходимые файлы миграции. Пора применить их к базе данных. Для этого перейдите в командную строку и перейдите в каталог библиотеки, в котором находится приложение, а затем введитеrake migrate следующим образом -
library> rake db:migrate
Это создаст таблицу schema_info, если она не существует, которая отслеживает текущую версию базы данных - каждая новая миграция будет новой версией, и любые новые миграции будут выполняться до тех пор, пока ваша база данных не достигнет текущей версии.
Rake- это программа сборки Ruby, аналогичная программе make в Unix, которую использует Rails для упрощения выполнения сложных задач, таких как обновление структуры базы данных и т. д.
Запуск миграции для производственной и тестовой баз данных
Если вы хотите указать, какую среду Rails использовать для миграции, используйте переменную оболочки RAILS_ENV.
Например -
library> export RAILS_ENV = production
library> rake db:migrate
library> export RAILS_ENV = test
library> rake db:migrate
library> export RAILS_ENV = development
library> rake db:migrate
NOTE- В Windows используйте команду «set RAILS_ENV = production» вместо команды экспорта .
Что следующее?
Теперь у нас есть база данных и необходимые таблицы. В двух последующих главах мы рассмотрим два важных компонента, которые называются Controller (ActionController) и View (ActionView).
- Создание контроллеров (Action Controller).
- Создание представлений (Action View).