17
#4 Ruby on Rails. Работа с моделями Миграции и связи Денис Калесников, главный программист Мэйк make.st

Ruby on Rails. Работа с моделями

  • 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

Добавить модель для хранения должностей на предприятии. Достаточно

хранить только название должности.

Задание 1. Ответ.

bundle exec rails g model Position name:string

bundle exec rake db:migrate

Связь многие-к-одному

Связь belongs_to устанавливает соединение

один-к-одному с другой моделью, когда один

экземпляр объявляющей модели

"принадлежит" одному экземпляру другой

модели.

На другой стороне связи belongs_to

используется связь has_many.

Задание 2

Привязать сотрудника к должности.

Задание 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

Удалить неиспользуемое поле Должность в таблице Сотрудники.

Задание 3. Ответ.

bundle exec rails g migration remove_position_from_employees position:string

bundle exec rake db:migrate

Спасибо за внимание!

Денис Калесников, главный программист Мэйк

make.st