SlideShare a Scribd company logo
1 of 17
Download to read offline
#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

More Related Content

What's hot

Денис Паясь
Денис ПаясьДенис Паясь
Денис ПаясьCodeFest
 
Spring the Ripper by Evgeny Borisov
Spring the Ripper by Evgeny BorisovSpring the Ripper by Evgeny Borisov
Spring the Ripper by Evgeny BorisovJavaDayUA
 
Конструктор / Денис Паясь (Яндекс)
Конструктор / Денис Паясь (Яндекс)Конструктор / Денис Паясь (Яндекс)
Конструктор / Денис Паясь (Яндекс)Ontico
 
C++ Базовый. Занятие 01.
C++ Базовый. Занятие 01.C++ Базовый. Занятие 01.
C++ Базовый. Занятие 01.Igor Shkulipa
 
системы сборок проектов
системы сборок проектовсистемы сборок проектов
системы сборок проектовRomero78
 
Как мы делаем модули PHP в Badoo – Антон Довгаль
Как мы делаем модули PHP в Badoo – Антон ДовгальКак мы делаем модули PHP в Badoo – Антон Довгаль
Как мы делаем модули PHP в Badoo – Антон ДовгальBadoo Development
 
Стабы для фронтенда - Никита Мостовой (HeadHunter)
Стабы для фронтенда - Никита Мостовой (HeadHunter)Стабы для фронтенда - Никита Мостовой (HeadHunter)
Стабы для фронтенда - Никита Мостовой (HeadHunter)AvitoTech
 

What's hot (9)

Денис Паясь
Денис ПаясьДенис Паясь
Денис Паясь
 
Spring the Ripper by Evgeny Borisov
Spring the Ripper by Evgeny BorisovSpring the Ripper by Evgeny Borisov
Spring the Ripper by Evgeny Borisov
 
Catalyst and Rose::DB
Catalyst and Rose::DBCatalyst and Rose::DB
Catalyst and Rose::DB
 
Конструктор / Денис Паясь (Яндекс)
Конструктор / Денис Паясь (Яндекс)Конструктор / Денис Паясь (Яндекс)
Конструктор / Денис Паясь (Яндекс)
 
C++ Базовый. Занятие 01.
C++ Базовый. Занятие 01.C++ Базовый. Занятие 01.
C++ Базовый. Занятие 01.
 
системы сборок проектов
системы сборок проектовсистемы сборок проектов
системы сборок проектов
 
Как мы делаем модули PHP в Badoo – Антон Довгаль
Как мы делаем модули PHP в Badoo – Антон ДовгальКак мы делаем модули PHP в Badoo – Антон Довгаль
Как мы делаем модули PHP в Badoo – Антон Довгаль
 
Стабы для фронтенда - Никита Мостовой (HeadHunter)
Стабы для фронтенда - Никита Мостовой (HeadHunter)Стабы для фронтенда - Никита Мостовой (HeadHunter)
Стабы для фронтенда - Никита Мостовой (HeadHunter)
 
Html лаб 2
Html лаб 2Html лаб 2
Html лаб 2
 

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

Drupal -organizaciya_razrabotki
Drupal  -organizaciya_razrabotkiDrupal  -organizaciya_razrabotki
Drupal -organizaciya_razrabotkidrupalconf
 
Drupal организация разработки
Drupal   организация разработкиDrupal   организация разработки
Drupal организация разработкиAnna Fedoruk
 
Dcmi v likin kyiv 2013
Dcmi v likin kyiv 2013Dcmi v likin kyiv 2013
Dcmi v likin kyiv 2013Viktor Likin
 
Валерий Чугреев, ИСЭРТ РАН — Архитектура MVC в контексте web-разработки — про...
Валерий Чугреев, ИСЭРТ РАН — Архитектура MVC в контексте web-разработки — про...Валерий Чугреев, ИСЭРТ РАН — Архитектура MVC в контексте web-разработки — про...
Валерий Чугреев, ИСЭРТ РАН — Архитектура MVC в контексте web-разработки — про...Dev_Party
 
C++ теория
C++ теорияC++ теория
C++ теорияtank1975
 
C++ теория
C++ теорияC++ теория
C++ теорияtank1975
 
C++ теория
C++ теорияC++ теория
C++ теорияtank1975
 
Корпоративное приложение на Rails
Корпоративное приложение на RailsКорпоративное приложение на Rails
Корпоративное приложение на RailsAndrei Kaleshka
 
Опыт разработки сложных клиент-серверных приложений на TypeScript и ASP.NET
Опыт разработки сложных клиент-серверных приложений на TypeScript и ASP.NETОпыт разработки сложных клиент-серверных приложений на TypeScript и ASP.NET
Опыт разработки сложных клиент-серверных приложений на TypeScript и ASP.NETGoSharp
 
Ember.js - Назад в Будущее - Odessa JS 2014
Ember.js - Назад в Будущее - Odessa JS 2014Ember.js - Назад в Будущее - Odessa JS 2014
Ember.js - Назад в Будущее - Odessa JS 2014Andrey Listochkin
 
Паттерны проектирования источников данных
Паттерны проектирования источников данныхПаттерны проектирования источников данных
Паттерны проектирования источников данныхAlex Polorotov
 
паттерны проектирования источников данных
паттерны проектирования источников данныхпаттерны проектирования источников данных
паттерны проектирования источников данныхVitaliy Trenkenshu
 
Backbone.js Профилактика сколиоза
Backbone.js Профилактика сколиоза Backbone.js Профилактика сколиоза
Backbone.js Профилактика сколиоза MitinPavel
 
Как перейти с двухзвенной архитектуры Desktop приложения на трехзвенную за од...
Как перейти с двухзвенной архитектуры Desktop приложения на трехзвенную за од...Как перейти с двухзвенной архитектуры Desktop приложения на трехзвенную за од...
Как перейти с двухзвенной архитектуры Desktop приложения на трехзвенную за од...GoSharp
 
Разработка модуля для Cms Drupal
Разработка модуля для Cms DrupalРазработка модуля для Cms Drupal
Разработка модуля для Cms DrupalDrupal Camp Kyiv
 
разработка модуля для Cms Drupal
разработка модуля для Cms Drupalразработка модуля для Cms Drupal
разработка модуля для Cms DrupalInna Tuyeva
 
Lviv Euro Drupal Camp 2015_От front-end разработки к темизации в Drupal
Lviv Euro Drupal Camp 2015_От front-end разработки к темизации в DrupalLviv Euro Drupal Camp 2015_От front-end разработки к темизации в Drupal
Lviv Euro Drupal Camp 2015_От front-end разработки к темизации в DrupaldeWeb
 
Олена Ольховик — Від frontend розробки до Drupal-темізації. Основи і специфіка
Олена Ольховик — Від frontend розробки до Drupal-темізації. Основи і специфікаОлена Ольховик — Від frontend розробки до Drupal-темізації. Основи і специфіка
Олена Ольховик — Від frontend розробки до Drupal-темізації. Основи і специфікаLEDC 2016
 
Пользовательские сценарии в карточках Docsvision 5
Пользовательские сценарии в карточках Docsvision 5Пользовательские сценарии в карточках Docsvision 5
Пользовательские сценарии в карточках Docsvision 5Docsvision
 

Similar to Ruby on Rails. Работа с моделями (20)

Drupal -organizaciya_razrabotki
Drupal  -organizaciya_razrabotkiDrupal  -organizaciya_razrabotki
Drupal -organizaciya_razrabotki
 
Drupal организация разработки
Drupal   организация разработкиDrupal   организация разработки
Drupal организация разработки
 
лек13 3
лек13 3лек13 3
лек13 3
 
Dcmi v likin kyiv 2013
Dcmi v likin kyiv 2013Dcmi v likin kyiv 2013
Dcmi v likin kyiv 2013
 
Валерий Чугреев, ИСЭРТ РАН — Архитектура MVC в контексте web-разработки — про...
Валерий Чугреев, ИСЭРТ РАН — Архитектура MVC в контексте web-разработки — про...Валерий Чугреев, ИСЭРТ РАН — Архитектура MVC в контексте web-разработки — про...
Валерий Чугреев, ИСЭРТ РАН — Архитектура MVC в контексте web-разработки — про...
 
C++ теория
C++ теорияC++ теория
C++ теория
 
C++ теория
C++ теорияC++ теория
C++ теория
 
C++ теория
C++ теорияC++ теория
C++ теория
 
Корпоративное приложение на Rails
Корпоративное приложение на RailsКорпоративное приложение на Rails
Корпоративное приложение на Rails
 
Опыт разработки сложных клиент-серверных приложений на TypeScript и ASP.NET
Опыт разработки сложных клиент-серверных приложений на TypeScript и ASP.NETОпыт разработки сложных клиент-серверных приложений на TypeScript и ASP.NET
Опыт разработки сложных клиент-серверных приложений на TypeScript и ASP.NET
 
Ember.js - Назад в Будущее - Odessa JS 2014
Ember.js - Назад в Будущее - Odessa JS 2014Ember.js - Назад в Будущее - Odessa JS 2014
Ember.js - Назад в Будущее - Odessa JS 2014
 
Паттерны проектирования источников данных
Паттерны проектирования источников данныхПаттерны проектирования источников данных
Паттерны проектирования источников данных
 
паттерны проектирования источников данных
паттерны проектирования источников данныхпаттерны проектирования источников данных
паттерны проектирования источников данных
 
Backbone.js Профилактика сколиоза
Backbone.js Профилактика сколиоза Backbone.js Профилактика сколиоза
Backbone.js Профилактика сколиоза
 
Как перейти с двухзвенной архитектуры Desktop приложения на трехзвенную за од...
Как перейти с двухзвенной архитектуры Desktop приложения на трехзвенную за од...Как перейти с двухзвенной архитектуры Desktop приложения на трехзвенную за од...
Как перейти с двухзвенной архитектуры Desktop приложения на трехзвенную за од...
 
Разработка модуля для Cms Drupal
Разработка модуля для Cms DrupalРазработка модуля для Cms Drupal
Разработка модуля для Cms Drupal
 
разработка модуля для Cms Drupal
разработка модуля для Cms Drupalразработка модуля для Cms Drupal
разработка модуля для Cms Drupal
 
Lviv Euro Drupal Camp 2015_От front-end разработки к темизации в Drupal
Lviv Euro Drupal Camp 2015_От front-end разработки к темизации в DrupalLviv Euro Drupal Camp 2015_От front-end разработки к темизации в Drupal
Lviv Euro Drupal Camp 2015_От front-end разработки к темизации в Drupal
 
Олена Ольховик — Від frontend розробки до Drupal-темізації. Основи і специфіка
Олена Ольховик — Від frontend розробки до Drupal-темізації. Основи і специфікаОлена Ольховик — Від frontend розробки до Drupal-темізації. Основи і специфіка
Олена Ольховик — Від frontend розробки до Drupal-темізації. Основи і специфіка
 
Пользовательские сценарии в карточках Docsvision 5
Пользовательские сценарии в карточках Docsvision 5Пользовательские сценарии в карточках Docsvision 5
Пользовательские сценарии в карточках Docsvision 5
 

More from Digital-агентство Мэйк

Системные коммуникации с пациентом
Системные коммуникации с пациентомСистемные коммуникации с пациентом
Системные коммуникации с пациентомDigital-агентство Мэйк
 
Как эффективно развивать и удерживать нужных сотрудников
Как эффективно развивать и удерживать нужных сотрудниковКак эффективно развивать и удерживать нужных сотрудников
Как эффективно развивать и удерживать нужных сотрудниковDigital-агентство Мэйк
 
Индивидуальный тюнинг и кастомизации своего продукта как новая стратегия раб...
Индивидуальный тюнинг и кастомизации своего продукта как новая стратегия раб...Индивидуальный тюнинг и кастомизации своего продукта как новая стратегия раб...
Индивидуальный тюнинг и кастомизации своего продукта как новая стратегия раб...Digital-агентство Мэйк
 
12 эффективных инструментов для отрыва от конкурентов
12 эффективных инструментов для отрыва от конкурентов 12 эффективных инструментов для отрыва от конкурентов
12 эффективных инструментов для отрыва от конкурентов Digital-агентство Мэйк
 
Современные тенденции против устаревших стереотипов
Современные тенденции против устаревших стереотиповСовременные тенденции против устаревших стереотипов
Современные тенденции против устаревших стереотиповDigital-агентство Мэйк
 
Продвижение в соцсетях: 13 эффективных способов
Продвижение в соцсетях: 13 эффективных способовПродвижение в соцсетях: 13 эффективных способов
Продвижение в соцсетях: 13 эффективных способовDigital-агентство Мэйк
 
Crm системы: клиент в центре внимания
Crm системы: клиент в центре вниманияCrm системы: клиент в центре внимания
Crm системы: клиент в центре вниманияDigital-агентство Мэйк
 
Системный подход к привлечению клиентов
Системный подход к привлечению клиентовСистемный подход к привлечению клиентов
Системный подход к привлечению клиентовDigital-агентство Мэйк
 
Cоциальные сети для молодёжных объединений
Cоциальные сети для молодёжных объединенийCоциальные сети для молодёжных объединений
Cоциальные сети для молодёжных объединенийDigital-агентство Мэйк
 
Эффективный сайт медицинского учреждения
Эффективный сайт медицинского учрежденияЭффективный сайт медицинского учреждения
Эффективный сайт медицинского учрежденияDigital-агентство Мэйк
 
Контекстная реклама: от теории к практике
Контекстная реклама: от теории к практикеКонтекстная реклама: от теории к практике
Контекстная реклама: от теории к практикеDigital-агентство Мэйк
 

More from Digital-агентство Мэйк (15)

Системные коммуникации с пациентом
Системные коммуникации с пациентомСистемные коммуникации с пациентом
Системные коммуникации с пациентом
 
Как эффективно развивать и удерживать нужных сотрудников
Как эффективно развивать и удерживать нужных сотрудниковКак эффективно развивать и удерживать нужных сотрудников
Как эффективно развивать и удерживать нужных сотрудников
 
Индивидуальный тюнинг и кастомизации своего продукта как новая стратегия раб...
Индивидуальный тюнинг и кастомизации своего продукта как новая стратегия раб...Индивидуальный тюнинг и кастомизации своего продукта как новая стратегия раб...
Индивидуальный тюнинг и кастомизации своего продукта как новая стратегия раб...
 
12 эффективных инструментов для отрыва от конкурентов
12 эффективных инструментов для отрыва от конкурентов 12 эффективных инструментов для отрыва от конкурентов
12 эффективных инструментов для отрыва от конкурентов
 
4 шага к счастью клиента
4 шага к счастью клиента4 шага к счастью клиента
4 шага к счастью клиента
 
Современные тенденции против устаревших стереотипов
Современные тенденции против устаревших стереотиповСовременные тенденции против устаревших стереотипов
Современные тенденции против устаревших стереотипов
 
Продвижение в соцсетях: 13 эффективных способов
Продвижение в соцсетях: 13 эффективных способовПродвижение в соцсетях: 13 эффективных способов
Продвижение в соцсетях: 13 эффективных способов
 
Угрозы безопасности в интернете
Угрозы безопасности в интернетеУгрозы безопасности в интернете
Угрозы безопасности в интернете
 
Crm системы: клиент в центре внимания
Crm системы: клиент в центре вниманияCrm системы: клиент в центре внимания
Crm системы: клиент в центре внимания
 
Ограничение доступа в ruby on rails
Ограничение доступа в ruby on railsОграничение доступа в ruby on rails
Ограничение доступа в ruby on rails
 
Ruby on Rails. Ajax-обработка html-форм
Ruby on Rails. Ajax-обработка html-формRuby on Rails. Ajax-обработка html-форм
Ruby on Rails. Ajax-обработка html-форм
 
Системный подход к привлечению клиентов
Системный подход к привлечению клиентовСистемный подход к привлечению клиентов
Системный подход к привлечению клиентов
 
Cоциальные сети для молодёжных объединений
Cоциальные сети для молодёжных объединенийCоциальные сети для молодёжных объединений
Cоциальные сети для молодёжных объединений
 
Эффективный сайт медицинского учреждения
Эффективный сайт медицинского учрежденияЭффективный сайт медицинского учреждения
Эффективный сайт медицинского учреждения
 
Контекстная реклама: от теории к практике
Контекстная реклама: от теории к практикеКонтекстная реклама: от теории к практике
Контекстная реклама: от теории к практике
 

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

  • 1. #4 Ruby on Rails. Работа с моделями Миграции и связи Денис Калесников, главный программист Мэйк make.st
  • 2. Миграции Миграции - это удобный способ изменения схемы. Вам не нужно писать SQL вручную, вы вызываете методы на языке Ruby и используете генераторы Rails. Каждую миграцию можно рассматривать как новую 'версию' базы данных. Схема изначально ничего не содержит, а каждая миграция изменяет ее, добавляя или убирая таблицы, столбцы или записи. Active Record также обновляет ваш файл db/schema.rb, чтобы он соответствовал текущей структуре вашей базы данных.
  • 3. Миграции. Пример. Данный код добавит в базу данных таблицу для хранения товаров
  • 4. Генератор файлов миграций bundle exec rails generate migration AddPartNumberToProducts part_number:string
  • 5. Генераторы моделей Для добавления новой модели в папке с проектом нужно вызвать команду bundle exec rails generate model Product name:string description:text Этот генератор создаст следующие файлы: Файл миграции XXXXXXXXXXXXXX_create_products.rb Файл с классом Product - app/models/product.rb Прочие файлы для тестирования.
  • 6. Миграции. Внесение изменений в БД В папке с проектом выполняем команду bundle exec rake db:migrate После этого данная миграция помечается как выполненная, то есть ее номер вносится в таблицу versions в базе данных проекта.
  • 7. Отмена миграции В папке с проектом выполняем команду bundle exec rake db:rollback После этого, номер данной миграции удаляется из таблицы versions.
  • 8. Проект “Реестр сотрудников” В проекте должна быть сущность Employee, содержащая следующие поля: Поле Тип данных Назначение position string Должность name string Полное имя job_start datetime Дата начала работы
  • 9. Задание 1 Добавить модель для хранения должностей на предприятии. Достаточно хранить только название должности.
  • 10. Задание 1. Ответ. bundle exec rails g model Position name:string bundle exec rake db:migrate
  • 11. Связь многие-к-одному Связь belongs_to устанавливает соединение один-к-одному с другой моделью, когда один экземпляр объявляющей модели "принадлежит" одному экземпляру другой модели. На другой стороне связи belongs_to используется связь has_many.
  • 13. Задание 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
  • 14. Удаление поля в модели Создаем миграцию: bundle exec rails generate migration RemovePartNumberFromProducts part_number:string
  • 15. Задание 3 Удалить неиспользуемое поле Должность в таблице Сотрудники.
  • 16. Задание 3. Ответ. bundle exec rails g migration remove_position_from_employees position:string bundle exec rake db:migrate
  • 17. Спасибо за внимание! Денис Калесников, главный программист Мэйк make.st