Розуміння основ Ruby on Rails: бази даних SQL та їх робота

Дізнавшись про Ruby, першим кроком, який ми зробили, було зрозуміти, як працює Інтернет та цикл запиту-відповіді Ruby on Rails.

Тепер настав час дізнатись про бази даних та про те, як вони зв’язуються з Ruby on Rails. В основному, відповідь є Модель: Mз MVC, як ми дізналися тут.

Перш ніж вивчати веб-розробку за допомогою Rails, я справді рекомендую спочатку вивчити Ruby .

Давайте почнемо!

Що таке база даних?

Мда ... Перша думка, яка мені спадає на думку, це те, що зберігає дані.

Але це визначення досить неточне! Масив, хеш, зв’язаний список або будь-яка структура даних може бути чимось, що може зберігати дані.

Після вимкнення комп'ютера ви втрачаєте всі значення даних, які зберігались у цьому масиві (такі ж, як і всі структури даних). Тож не найкраща ідея зберігати все своє precious data.

Тут нам потрібно вирішити дві проблеми:

  1. Зберігайте дані та отримуйте їх у будь-який час, коли ми захочемо.
  2. Зберігайте дані впорядковано та структуровано, щоб ми могли легко їх отримати.

Чи слід зберігати всі дані в блокноті? Просто помістіть всю інформацію всередину, розділивши комами, збережіть txt fileі готово. Тепер я можу відкрити його та отримати всі потрібні дані. Ми можемо зберігати дані та отримувати їх у будь-який час ... проблема вирішена!

Ми вирішили цю проблему, але пропустили іншу. Тепер усі дані зберігаються, і ми не втратимо їх. Але це не добре структуровано у файлі. Нам потрібне правило для зберігання та отримання даних в організованій та добре структурованій формі.

Давайте подумаємо над тим, як ми можемо організувати дані в структурованому вигляді.

А як щодо впорядкування всіх даних у таблицях?

Отже, ось у нас є: заголовок таблиці ( назва стовпця: Ім'я, Прізвище, Адреса тощо ), що містить значення, які ми будемо зберігати. Наприклад, якщо ми хочемо зберегти рядок "Міккі" (значення) , він буде збережений у стовпці "Ім'я" .

  • Таблиця : скажімо Люди
  • Стовпці : Ім'я , Прізвище , Адреса тощо
  • Рядки : у цьому випадку ми можемо сказати, що рядком може бути людина з, наприклад, іменем “ Міккі ” та прізвищем “ Миша ”, адресою “123 Fantasy Way ” тощо.
  • Поля : всі дані, що зберігаються в базі даних.

І тепер у нас є добре структурований спосіб зберігання даних : у таблиці!

Як щодо отримання, видалення, вставки та оновлення даних?

Ми будемо використовувати мову SQL ( я не згадуватиму світ NoSQL! ) Для обробки даних. Давайте розберемося з основами.

  1. ОТРИМАЙТЕ: якщо ми хочемо отримати всі дані ( особа ) з таблиці Люди , нам потрібно вибрати їх із цієї таблиці.

Символ ( *) означає, що він виділить усі стовпці з таблиці Люди . Якщо ми можемо отримати всі стовпці, ми можемо вказати, які стовпці нам потрібні для цього вибору.

2. ВИДАЛИТИ: ми хочемо видалити всі дані з нашої таблиці People .

Але не загальноприйнято видаляти всі дані з таблиці. Зазвичай ми використовуємо умову для видалення, як-от «Я хочу видалити всіх людей до 21 року». Про це ми дізнаємось пізніше у цій публікації!

3. ВСТАВИТИ: ми будемо вставляти / зберігати дані до таблиці.

або ми можемо вказати, в які стовпці ми хочемо вставити дані.

4. ОНОВЛЕННЯ: ми зберегли дані, але хочемо їх оновити.

Використання умов у наших запитах

Тепер ми можемо використовувати мову SQL для запиту (вибору, видалення, вставки, оновлення) даних.

  • Але що, якщо ми хочемо видалити лише записи з прізвищем Кіношита ?
  • Або якщо ми хочемо оновити конкретну особу з іменем Леандро та прізвищем Кіношита ?
  • Або просто вибрати всі дані з таблиці людей і відсортувати їх за віком від молодшого до старшого?

Так, ми використовуємо такі умови, як де і як замовляти, а оператори як або та та . Давайте подивимося кілька прикладів:

  • Видалення всіх записів з таблиці людей з прізвищем Кіношита .
  • Оновлення всіх записів у таблиці людей із іменем Леандро та прізвищем Кіношита .
  • Виділення всіх записів із таблиці людей, але упорядкування за віком (у порядку зростання → ASC).

Зв'язок між таблицями

Ми знаємо, як виконувати запити (з умовами чи без них). Давайте розберемося, як працюють взаємозв'язки таблиць.

  • Один до одного (1–1) : мова йде про зв’язок між двома таблицями, в яких одна може належати лише одній. наприклад, людина має один паспорт, і цей паспорт належить цій конкретній особі. Отже, у цьому прикладі ми маємо таблицю Люди, таблицю Паспорти та співвідношення 1–1.
  • Один до багатьох (1-n) : мова йде про зв'язок між двома таблицями, в яких запис з однієї таблиці може посилатися на багато записів з іншої. наприклад, уявіть платформу електронної комерції: користувачі, замовлення, товари, платежі тощо. Користувач може мати багато замовлень, і кожне замовлення належить цьому конкретному користувачеві. Отже, у цьому прикладі ми маємо таблицю Користувачі, Замовлення таблиць та 1-n відношення.
  • Many to Many (nn) : мова йде про зв'язок між двома таблицями, в яких запис з однієї таблиці може посилатися на багато записів з іншої. І запис іншого може також посилатися на багато записів одного. Наприклад, ми знову маємо платформу електронної комерції: ми ділимо товари на категорії. Категорія має багато продуктів (категорія Технологія містить багато продуктів, таких як стільникові телефони, ноутбуки тощо), і товар може належати до багатьох категорій (товар Мобільний телефон належить до категорій технологій та електроніки). Отже, у цьому прикладі ми маємо таблицю Products, таблицю Categories і nn відношення.

Режим рейок увімкнено

Тепер ми розуміємо значення баз даних, ми спробували деякі основні запити та поговорили про взаємозв'язок між таблицями. Але як ми можемо використовувати ці знання у Ruby on Rails та світі веб-розробки ?

Перш за все: Rails - це Rails . База даних є база даних . Це очевидно? Але люди зазвичай плутаються з цього приводу.

Користувач модель може представляти Users таблицю. Але модель не є таблицею.

  • У базі даних є таблиці та рядки.
  • На рейках маємо моделі (класи) та предмети.

Уявіть собі сайт блогу. Для кожного допису в блозі потрібен автор. Отже, ми створюємо таблицю Authors з деякими стовпцями (ім’я, прізвище тощо):

У міграції, ми додамо стовпці 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 або перегляньте “За лаштунками” асоціації активних записів “Багато”.

Запити на рейки

Ми можемо робити запити за допомогою методів ActiveRecord:

  • all : Отримати всі об’єкти з певної моделі.

За лаштунками він виконує SELECT * FROM postsзапит.

  • find : Використовуючи find, ми можемо отримати об’єкт за ідентифікатором (первинний ключ).

За лаштунками виконується SELECT * FROM posts WHERE id = 1запит.

  • де : Отримати об’єкти, що відповідають умовам.

За лаштунками виконується SELECT * FROM posts WHERE title = 'Database & Rails'запит.

  • порядок : сортування всіх об’єктів на основі стовпця.

За лаштунками виконується SELECT * FROM posts ORDER BY created_at DESCзапит.

Це все!

Ми тут багато чому навчились. Сподіваюсь, ви, хлопці, оціните вміст і дізнаєтесь більше про те, як працюють моделі баз даних та рейок.

Це ще один крок вперед у моїй подорожі до навчання та освоєння Rails та веб-розробки. Документацію моєї повної подорожі ви можете побачити тут, у моїй публікації "Ренесанс розробник" .

Якщо ви хочете пройти повний курс Ruby and Rails, навчитися реальним навичкам кодування та будувати проекти, спробуйте один місяць Ruby Bootcampта Rails Bootcamp . До зустрічі ☺

Веселіться і продовжуйте вчитися та кодувати.

Мій Twitter і Github. ☺