Ruby on Rails: база данных и модели SQL

Понимание основ языка SQL и Rails

После изучения Ruby первым делом мы поняли, как работают цикл запрос-ответ в Интернете и Ruby on Rails.

Пришло время узнать о базах данных и о том, как они связаны с Ruby on Rails. По сути, ответ - Модель. M из MVC, как мы узнали здесь.

Прежде чем изучать веб-разработку с помощью Rails, я действительно рекомендую изучить Сначала Ruby.

Давай начнем!

Что такое база данных?

Хммм ... Первая мысль, которая приходит мне в голову, - это «что-то», в котором хранятся данные, информация.

Но это «определение» неточно! Массив, хэш, связанный список или любая структура данных могут быть «чем-то», способным хранить данные.

Когда вы выключаете компьютер, вы теряете все значения данных, которые были сохранены в этом массиве (как и все структуры данных). Так что хранить все мои precious data.

Здесь нам нужно решить две проблемы:

  1. Храните данные и получайте их в любое время.
  2. Храните данные в организованном и структурированном виде, чтобы мы могли легко их получить.

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

Мы решили эту проблему, но упустили другую. Теперь все данные хранятся, и мы их не теряем. Но плохо структурирован в файле. Нам нужно правило для хранения и получения данных в организованной и хорошо структурированной форме.

Давайте подумаем, как организовать данные в хорошо структурированной форме.

Как насчет организации всех данных в таблицах?

Итак, что у нас есть: у нас есть заголовок таблицы (имя столбца: имя, фамилия, адрес и т. Д.), и в нем будут значения, которые мы будем хранить. Например, если мы хотим сохранить строку «Микки» (значение), она будет сохранена в «Имя» столбец.

  • Стол: допустим, Люди.
  • Столбцы: Имя, Фамилия, Адрес и т. д..
  • Строки: в этом случае мы можем сказать, что строка может быть человеком, например, с именем «Mickey », фамилия« Мышь », адрес« 123 Fantasy Way »и т. д.
  • Поля: все данные, хранящиеся в базе данных.

И теперь у нас есть хорошо структурированный способ хранения данных : Табличный способ!

Как насчет получения, удаления, вставки и обновления данных?

Мы будем использовать язык SQL (Я не буду упоминать мир NoSQL!) для управления данными. Давайте познакомимся с основами!

  1. GET: если мы хотим получить все данные (person) из таблицы People, нам нужно выбрать их из этот стол.

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

2. УДАЛИТЬ: мы хотим удалить все данные из нашей таблицы Люди.

Но удалять все данные из таблицы не принято. Обычно мы используем условие для удаления, например «Я хочу удалить всех людей младше 21 года». Мы узнаем об этом позже в этом посте!

3. ВСТАВИТЬ: мы вставим / сохраним данные в таблицу.

или мы можем указать, в какие столбцы мы хотим вставить данные.

4. ОБНОВЛЕНИЕ: мы сохранили данные, но хотим их обновить.

Использование условий в наших запросах

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

  • Но если мы хотим удалить только записи с фамилией Киношита?
  • Или если мы хотим обновить конкретного человека с именем Леандро и фамилией Киношита?
  • Или просто выбрать все данные из таблицы людей и отсортировать по возрасту от младшего к старшему?

Да, мы используем такие условия, как where и order by, и такие операторы, как или и и. Давайте посмотрим на несколько примеров:

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

Связь между таблицами

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

  • Один к одному (1–1): это отношение между двумя таблицами, в котором одна может принадлежать только другой. например, у человека есть один паспорт, и этот паспорт принадлежит этому человеку. Итак, в этом примере у нас есть таблица People, таблица Passports и отношение 1–1.
  • Один ко многим (1-n): это отношение между двумя таблицами, в котором запись из одной таблицы может ссылаться на множество записей из другой. например, Представьте себе платформу электронной коммерции: пользователи, заказы, продукты, платежи и т. д. У пользователя может быть много заказов, и каждый заказ принадлежит этому конкретному пользователю. Итак, в этом примере у нас есть таблица Users, таблица Orders и отношение 1-n.
  • Многие ко многим (n-n): речь идет о связи между двумя таблицами, в которой запись из одной таблицы может ссылаться на множество записей из другой. И запись из другого может также ссылаться на многие записи из одного. например, у нас снова есть платформа электронной коммерции: мы делим продукты на категории. В категории много продуктов (в категории «Технологии» много продуктов, таких как сотовые телефоны, ноутбуки и т. Д.), И продукт может принадлежать ко многим категориям (продукт «Мобильный телефон» относится к категориям «Технологии» и «Электроника»). Итак, в этом примере у нас есть таблица Products, таблица Categories и отношение n-n.

Rails Mode включен

Мы поняли значение баз данных, попробовали несколько простых запросов и установили связь между таблицами. Но как мы можем использовать эти знания в Ruby on Rails и мире веб-разработки?

Прежде всего: Rails - это Rails. База данных - это База данных. Это очевидно? Но люди обычно путаются в этом.

Модель User может представлять таблицу Users. Но модель - это не таблица.

  • В базе данных у нас есть таблицы и строки.
  • На рельсах у нас есть модели (классы) и объекты.

Представьте себе блог-сайт. Блогу нужен автор для каждого сообщения. Итак, мы создаем таблицу Авторы с несколькими столбцами (first_name, last_name и т. Д.)

.. при миграции мы добавляем столбцы first_name, last_name, email, birthday, email, created_at и updated_at. (created_at и updated_at создаются кодом t.timestamps.

Итак, мы создали миграцию (код Ruby), запустили команду rake db:migrate в терминале, и она сгенерирует таблицу Authors с столбцами first_name, last_name, email, birthday, email, created_at и updated_at.

Вернемся к Rails, мы можем создать Author модель:

Итак, теперь у нас есть Authors таблица с некоторыми столбцами и Author модель.

Использование Rails Console

Откройте терминал и введите bundle exec rails c. Помните, что мы находимся в консоли RAILS, поэтому у нас есть классы, объекты, атрибуты и т. Д.

Отношения на рельсах

Мы создали Authors таблицу / модель. Теперь нам нужна таблица / модель Posts. У автора много сообщений, и сообщение принадлежит определенному автору. Здесь отношение один ко многим (1-n). Помнить?

Поэтому, когда мы создаем таблицу Posts, нам нужно сохранить ссылку на автора сообщения (столбец author_id в таблице Сообщения). Он известен как Foreign Key.

А как нам соотнести модели?

автор has_many сообщений

сообщение принадлежит автору

Использование Rails Console

* Краткое описание has_many и belongs_to. Оба codes - это методы, определенные в ActiveRecord классе. Если вы видите, мы создаем наши модели, унаследованные от ActiveRecord::Base.

Помните на Ruby Foundation, что мы изучали объектно-ориентированное программирование, часть наследования? Вот почему мы можем использовать методы has_many и belongs_to, не определяя их где-либо в нашем приложении. Rails сделает это за нас.

Если вы хотите глубже понять эту концепцию, клонируйте репозиторий Rails или разбирайтесь в закулисье ассоциации Active Record« Has Many ».

Запросы на Rails

Мы можем запросить, используя методы ActiveRecord:

  • все: получить все объекты определенной модели.

За кулисами он выполняет запрос SELECT * FROM posts.

  • find: с помощью find мы можем получить объект по id (первичный ключ).

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

  • где: получить объекты, соответствующие условиям.

За кулисами он выполняет SELECT * FROM posts WHERE title = 'Database & Rails'query.

  • порядок: сортировка всех объектов по столбцу.

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

Это все!

Здесь мы многому научились. Я надеюсь, что вы, ребята, могли оценить содержание и узнать больше о том, как работают модели Databases и Rails.

Это еще один шаг вперед на моем пути к изучению и освоению Rails и веб-разработки. Вы можете увидеть документацию о моем полном путешествии здесь, в моей публикации Renaissance Developer.

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

Надеюсь, вам понравился этот контент. Поддержите мою работу над Ko-Fi

Мой Twitter и Github. ☺