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).