Upload
-
View
255
Download
1
Embed Size (px)
Citation preview
#4 Ruby on Rails. Работа
с моделямиМиграции и связи
Денис Калесников, главный программист Мэйк
make.st
Миграции
Миграции - это удобный способ изменения схемы. Вам не нужно писать SQL
вручную, вы вызываете методы на языке Ruby и используете генераторы
Rails.
Каждую миграцию можно рассматривать как новую 'версию' базы данных.
Схема изначально ничего не содержит, а каждая миграция изменяет ее,
добавляя или убирая таблицы, столбцы или записи. Active Record также
обновляет ваш файл db/schema.rb, чтобы он соответствовал текущей
структуре вашей базы данных.
Генератор файлов миграций
bundle exec rails generate migration AddPartNumberToProducts
part_number:string
Генераторы моделей
Для добавления новой модели в папке с проектом нужно вызвать команду
bundle exec rails generate model Product name:string description:text
Этот генератор создаст следующие файлы:
Файл миграции XXXXXXXXXXXXXX_create_products.rb
Файл с классом Product - app/models/product.rb
Прочие файлы для тестирования.
Миграции. Внесение изменений в БД
В папке с проектом выполняем команду
bundle exec rake db:migrate
После этого данная миграция помечается как выполненная, то есть ее номер
вносится в таблицу versions в базе данных проекта.
Отмена миграции
В папке с проектом выполняем команду
bundle exec rake db:rollback
После этого, номер данной миграции удаляется из таблицы versions.
Проект “Реестр сотрудников”
В проекте должна быть сущность Employee, содержащая следующие поля:
Поле Тип данных Назначение
position string Должность
name string Полное имя
job_start datetime Дата начала работы
Задание 1
Добавить модель для хранения должностей на предприятии. Достаточно
хранить только название должности.
Связь многие-к-одному
Связь belongs_to устанавливает соединение
один-к-одному с другой моделью, когда один
экземпляр объявляющей модели
"принадлежит" одному экземпляру другой
модели.
На другой стороне связи belongs_to
используется связь has_many.
Задание 2. Ответ.
bundle exec rails g migration add_position_id_to_employees position_id:integer
bundle exec rake db:migrate
belongs_to :position - в файл app/models/employee.rb
has_many :employees - в файл app/models/position.rb
Удаление поля в модели
Создаем миграцию:
bundle exec rails generate migration RemovePartNumberFromProducts
part_number:string
Задание 3. Ответ.
bundle exec rails g migration remove_position_from_employees position:string
bundle exec rake db:migrate