След като научихме за Ruby, първата стъпка, която направихме, беше да разберем как работят мрежата и Ruby on Rails цикъл на заявка-отговор.
Сега е време да научите за базите данни и как те се свързват с Ruby on Rails. По принцип отговорът е Модел: M
от MVC
, както научихме тук.
Преди да науча уеб разработка с Rails, наистина препоръчвам първо да научите за Ruby .
Нека да започнем!
Какво представлява базата данни?
Хммм ... Първата мисъл, която ми идва на ум, е нещо, което съхранява данни.
Но това определение е доста неточно! Масив, хеш, свързан списък или всякаква структура от данни може да бъде нещо, което може да съхранява данни.
Когато изключите компютъра, губите всички стойности на данните, които са били съхранени в този масив (същите като всички структури от данни). Така че не е добра идея да съхранявате всичките си precious data
.

Тук трябва да решим два проблема:
- Съхранявайте данни и ги получавайте по всяко време, когато пожелаем.
- Съхранявайте данните по организиран и структуриран начин, за да можем лесно да ги получим.
Трябва ли да съхранявам всички данни в бележник? Просто поставете цялата информация в нея, разделена със запетаи, запазете txt file
и готово. Сега мога да го отворя и да получа всички данни, които искам. Можем да съхраняваме данни и да ги получаваме по всяко време ... проблемът е решен!
Решихме този проблем, но пропуснахме другия. Сега всички данни се съхраняват и няма да ги загубим. Но това не е добре структурирано във файла. Имаме нужда от правилото, за да съхраняваме и получаваме данни в организирана и добре структурирана форма.
Нека помислим как можем да организираме данните по добре структуриран начин.
Какво ще кажете за организиране на всички данни в таблици?

И така, тук имаме: заглавката на таблицата ( име на колони: Име, Фамилия, Адрес и т.н. ), съдържаща стойности, които ще съхраняваме. Например, ако искаме да съхраним низа “Mickey” (стойността) , той ще се съхранява в колоната “First Name” .
- Таблица : да речем Хора
- Колони : собствено име , Фамилия , Адрес , и т.н.
- Редове : в този случай можем да кажем, че ред може да бъде човек с например име „ Мики “ и фамилия „ Мишка “, адрес „123 Fantasy Way “ и т.н.
- Полета : всички данни, съхранявани в базата данни.
И сега имаме добре структуриран начин за съхраняване на данни : в таблица!
Какво ще кажете за получаване, изтриване, вмъкване и актуализиране на данни?
Ще използваме SQL език ( няма да споменавам света NoSQL! ), За да манипулираме данните. Нека вземем основите.
- ВЗЕМЕТЕ: ако искаме да получим всички данни ( човек ) от таблицата Хора , трябва да ги изберем от тази таблица.
Символът ( *) означава, че ще избере всички колони от таблицата Хора . Ако можем да получим всички колони, можем да посочим кои колони са ни необходими за този избор.
2. ИЗТРИВАНЕ: искаме да изтрием всички данни от нашата таблица Хора .
Но не е обичайно изтриването на всички данни от таблица. Обикновено използваме условие за изтриване, като „Искам да изтрия всички хора под 21-годишна възраст“. Ще научим как по-късно в тази публикация!
3. INSERT: ще вмъкнем / съхраним данни в таблицата.
или можем да посочим в кои колони искаме да вмъкнем данни.
4. АКТУАЛИЗАЦИЯ: съхранихме данните, но искаме да ги актуализираме.
Използване на условия в нашите запитвания
Сега можем да използваме SQL език за заявка (избор, изтриване, вмъкване, актуализиране) на данни.
- Но какво, ако искаме да изтрием само записи с фамилното име Киношита ?
- Или ако искаме да актуализираме конкретно лице с име Леандро и фамилия Киношита ?
- Или просто изберете всички данни от таблицата с хора и ги сортирайте по възраст от по-млади на по-големи?
Да, използваме условия като къде и как да поръчаме, а оператори като или и и . Нека да видим няколко примера:
- Изтриване на всички записи от таблицата с хора с фамилно име Киношита .
- Актуализиране на всички записи от таблицата с хора с име Леандро и фамилия Киношита .
- Избиране на всички записи от таблицата с хора, но подреждането им по възраст (във възходящ ред → ASC).
Връзка между таблици
Ние знаем как да изпълняваме заявки (със или без условия). Нека разберем как работят взаимоотношенията на таблиците.
- Едно към едно (1–1) : става дума за връзка между две таблици, в която едната може да принадлежи само на другата. например човек има един паспорт и този паспорт принадлежи на това конкретно лице. Така че в този пример имаме таблица Хора, Таблици за паспорти и връзка 1–1.
- Един към много (1-n) : става дума за връзка между две таблици, в която запис от една таблица може да препраща към много записи от друга. например Представете си платформа за електронна търговия: потребители, поръчки, продукти, плащания и др. Потребителят може да има много поръчки и всяка поръчка принадлежи на конкретния потребител. Така че в този пример имаме таблица Потребители, Поръчки на таблици и 1-n връзка.
- Много към много (nn) : става дума за връзка между две таблици, в която запис от една таблица може да препраща към много записи от друга. И запис от друг може също да препраща към много записи от този. напр. Имаме отново платформата за електронна търговия: ние разделяме продуктите по категории. Категорията има много продукти (категорията Технология има много продукти като мобилни телефони, преносими компютри и т.н.) и продукт може да принадлежи към много категории (продукт Мобилен телефон принадлежи към категориите Технологии и електроника). Така че в този пример имаме таблица Продукти, Категории таблици и връзка nn.
Включен режим на релси
Сега разбираме значението на базите данни, опитахме някои основни заявки и говорихме за връзката между таблиците. Но как можем да използваме тези знания в Ruby on Rails и в уеб разработката ?
На първо място: Rails е Rails . Базата данни е база данни . Очевидно ли е? Но хората обикновено се объркват за това.
А Потребителят модел може да представлява Потребители маса. Но моделът не е масата.
- В базата данни имаме таблици и редове.
- На релсите имаме модели (класове) и обекти.
Представете си сайт за блог. Блогът се нуждае от автор за всяка публикация. Така че ние създаваме таблица Authors с някои колони (first_name, last_name и т.н.):
В миграцията, ние добавяме колони first_name
, last_name
, email
, birthday
, created_at
, и updated_at
. ( created_at
и updated_at
са създадени от t.timestamps
кода).
Така че ние създаваме миграция (Ruby код), стартирайте rake db:migrate
командата в терминала, а тя генерира таблица Authors
с first_name
, last_name
, email
, birthday
, created_at
, и updated_at
колони.
Обратно към Rails - можем да създадем Author
модел:
Така че сега имаме Authors
таблица с няколко колони и Author
модел.
Използване на конзолата Rails
Отворете терминала и напишете bundle exec rails c
. Не забравяйте, че сме в конзолата RAILS , така че имаме класове, обекти, атрибути и т.н.
Връзки по релси
Създадохме Authors
таблица / модел. Това, от което се нуждаем сега, е Posts
таблица / модел. Автор има много публикации и публикацията принадлежи на определен автор. Връзката тук е една към много ( 1-n ). Помня?
Така че, когато създаваме Posts
таблица, трябва да съхраняваме препратка към автора на публикацията (колона author_id в таблицата Posts ). Известно е като Foreign Key
.
И как да свържем моделите?
has_many
публикации на автора
публикация принадлежи_ на автор
Използване на конзолата Rails
* Бързо обяснение за has_many
и belongs_to
. И двата codes
метода са дефинирани за ActiveRecord
клас. Можете да видите, че ние създаваме нашите модели, наследяващи от ActiveRecord::Base
.
Спомняте ли си в статията ми за Ruby Foundation, че научихме за обектно-ориентираното програмиране, частта за наследяване? Ето защо можем да използваме has_many
и belongs_to
методи, без да ги дефинираме никъде в нашето приложение. Rails се справя с нас.
Ако искате да разберете дълбоко тази концепция, клонирайте репото на Rails или проверете зад кулисите на асоциацията за активни записи „Има много“.
Заявки за релси
Можем да правим заявки, използвайки методите на ActiveRecord:
- всички : Вземете всички обекти от определен модел.
Зад кулисите тя изпълнява SELECT * FROM posts
заявката.
- find : Използвайки find, можем да получим обекта по id (първичен ключ).
Зад кулисите тя изпълнява SELECT * FROM posts WHERE id = 1
заявка.
- къде : Вземете обектите, които преминават условията.
Зад кулисите тя изпълнява SELECT * FROM posts WHERE title = 'Database & Rails'
заявка.
- ред : Сортиране на всички обекти въз основа на колона.
Зад кулисите тя изпълнява SELECT * FROM posts ORDER BY created_at DESC
заявка.
Това е всичко!
Тук научихме много. Надявам се вие да оцените съдържанието и да научите повече за това как работят базите данни и моделите Rails.
Това е още една стъпка напред в моето пътуване към обучение и овладяване на Rails и уеб разработка. Можете да видите документацията за пълното ми пътуване тук в моята публикация на Renaissance Developer .
Ако искате пълен курс по Ruby and Rails, научете реални умения за кодиране и изграждайте проекти, опитайте One Month Ruby Bootcampи Rails Bootcamp . Ще се видим там ☺
Забавлявайте се и продължете да учите и кодирате.
Моят Twitter & Github. ☺