Понимание основ Ruby on Rails: базы данных SQL и как они работают

После изучение рубипервый шаг, который мы предприняли, состоял в том, чтобы понять, как web и цикл запроса-ответа Ruby on Rails Работа.

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

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

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

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

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

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

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

Здесь нам нужно решить две задачи:

  1. Храните данные и получайте их в любое время.

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

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

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

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

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

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

  • Стол: скажем Люди

  • Столбцы: Имя, Фамилия, Адрестак далее

  • Ряды: в этом случае мы можем сказать, что строка может быть человек например, с именем «Микки» и фамилией «Маус», адресом «123 Fantasy Way» и т. д.

  • Поля: все данные хранятся в базе данных.

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

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

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

  1. ПОЛУЧИТЬ: если мы хотим получить все данные (человек) из Люди table, нам нужно выбрать его из этой таблицы.
SELECT * FROM People;

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

SELECT firstname, lastname, age FROM People;
  1. УДАЛИТЬ: мы хотим удалить все данные из нашего Люди стол.
DELETE FROM People;

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

  1. ВСТАВЛЯТЬ: мы будем вставлять/сохранять данные в таблицу.
INSERT INTO People VALUES ('Leandro', 'Tk', 'My Address 123', 'São Paulo', 23);

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

INSERT INTO People (firstname, lastname, age) VALUES ('Leandro', 'Tk', 23);
  1. ОБНОВИТЬ: мы сохранили данные, но хотим их обновить.
UPDATE People SET firstname='Gennady', lastname='korotkevich';

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

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

  • Но что, если мы хотим удалить только записи с фамилией Киношита?

  • Или если мы хотим обновить имя конкретного человека Леандрои фамилия Киношита?

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

Да, мы используем такие условия, как кудаи **упорядочить по**, а также такие операторы, как или жеа также а также. Давайте посмотрим несколько примеров:

  • Удаление всех записей из таблицы людей с фамилией Киношита.
DELETE From People WHERE lastname="Kinoshita";
  • Обновление всех записей из таблицы людей с именем Леандро и фамилия Киношита.
UPDATE People SET firstname="Gennady" WHERE firstname="Leandro" AND lastname="Kinoshita";
  • Выбор всех записей из таблицы людей, но упорядочение их по возрасту (в порядке возрастания → ASC).
SELECT * FROM People ORDER BY age;

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

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

  • Один к одному (1–1): речь идет об отношениях между двумя таблицами, в которых одна может принадлежать только другой. например У человека есть один паспорт, и этот паспорт принадлежит этому конкретному лицу. Итак, в этом примере у нас есть таблица People, таблица Passports и отношение 1–1.

  • Один ко многим (1-n): речь идет об отношениях между двумя таблицами, в которых запись из одной таблицы может ссылаться на множество записей из другой. например Представьте себе платформу электронной коммерции: пользователи, заказы, продукты, платежи и т. д. У пользователя может быть много заказов, и каждый заказ принадлежит этому конкретному пользователю. Итак, в этом примере у нас есть таблица Users, таблица Orders и отношение 1-n.

  • Многие ко многим (nn): речь идет об отношениях между двумя таблицами, в которых запись из одной таблицы может ссылаться на множество записей из другой. И запись из другого также может ссылаться на многие записи из одного. например У нас снова платформа электронной коммерции: мы делим товары на категории. В категории есть много продуктов (в категории «Технологии» много продуктов, таких как сотовые телефоны, ноутбуки и т. д.), и продукт может принадлежать многим категориям (продукт «Мобильный телефон» относится к категориям «Технологии» и «Электроника»). Итак, в этом примере у нас есть таблица Products, таблица Categories и отношение nn.

Режим Rails включен

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

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

Пользовательская модель Можно представлять таблицу пользователей. Но модель — это не стол.

  • в база данныху нас есть таблицы и строки.

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

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

rails g migration CreateAuthors

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

class CreateAuthors < ActiveRecord::Migration[5.0]
  def change
    create_table :authors do |t|
      t.string :first_name
      t.string :last_name
      t.string :email
      t.date :birthday
      t.timestamps
    end
  end
end

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

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

class Author < ActiveRecord::Base

end

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

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

Откройте терминал и введите bundle exec rails c. Помните, мы находимся в РЕЛЬСЫ консоль, поэтому у нас есть классы, объекты, атрибуты и т.д.

author = Author.new
=> #<Author id: nil, first_name: nil, last_name: nil>
author.first_name = "Leandro"
=> "Leandro"
author.last_name = "Tk"
=> "Tk"
author.save
=> #<Author id: 1, first_name: "Leandro", last_name: "Tk">

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

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

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

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

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

class Author < ActiveRecord::Base

  has_many :posts

end

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

class Post < ActiveRecord::Base

  belongs_to :author

end

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

author = Author.new
=> #<Author id: nil, first_name: nil, last_name: nil>
author.first_name = "Leandro"
=> "Leandro"
author.last_name = "Tk"
=> "Tk"
author.save
=> #<Author id: 1, first_name: "Leandro", last_name: "Tk">

post = Post.new(title: "Database & Rails", text: "Lorem Ipsum...")
=> #<Post id: 1, title: "Database & Rails", text: "Lorem Ipsum...", author_id: nil>
post.author
=> nil
post.author = author
=> #<Author id: 1, first_name: "Leandro", last_name: "Tk">
post
=> #<Post id: 1, title: "Database & Rails", text: "Lorem Ipsum...", author_id: 1>
post.save
=> #<Post id: 1, title: "Database & Rails", text: "Lorem Ipsum...", author_id: 1>
  • Краткое объяснение о has_many а также belongs_to. Оба codes методы, определенные на ActiveRecord учебный класс. Вы можете видеть, что мы создаем наши модели, наследуя от ActiveRecord::Base.

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

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

Запросы на Rails

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

  • все: Получить все объекты из определенной модели.
Post.all
=> [#<Post id: 1, title: "Database & Rails", text: "Lorem Ipsum...", author_id: 1>]

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

  • найти: С помощью find мы можем получить объект по id (первичному ключу).
Post.find(1)
=> #<Post id: 1, title: "Database & Rails", text: "Lorem Ipsum...", author_id: 1>

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

  • куда: получить объекты, соответствующие условиям.
Post.where(title: "Database & Rails")
=> [#<Post id: 1, title: "Database & Rails", text: "Lorem Ipsum...", author_id: 1>]
Post.where(title: "Database & Rails").first
=> #<Post id: 1, title: "Database & Rails", text: "Lorem Ipsum...", author_id: 1>

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

  • заказ: Сортировка всех объектов по столбцу.
Post.all
=> [#<Post id: 1, title: "Database & Rails", text: "Lorem Ipsum...", created_at: "2015-10-13 20:00:00", author_id: 1>, #<Post id: 2, title: "Ruby on Rails: HTTP, MVC and Routes", text: "Lorem Ipsum2...", created_at: "2015-10-13 21:00:00", author_id: 1>]
Post.order("created_at DESC")
=> [#<Post id: 2, title: "Ruby on Rails: HTTP, MVC and Routes", text: "Lorem Ipsum2...", created_at: "2015-10-13 20:00:00", author_id: 1>, #<Post id: 1, title: "Database & Rails", text: "Lorem Ipsum...", created_at: "2015-10-13 21:00:00", author_id: 1>]

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

Это все!

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

Это еще один шаг вперед в моем путешествии по изучению и освоению Rails и веб-разработки. Вы можете увидеть документацию о моем полном путешествии здесь, на моем Публикация «Ренессанс Девелопер».

Если вы хотите полный Рубин а также Рельсы конечно, изучите реальные навыки кодирования и создавайте проекты, попробуйте Один месяц Ruby Bootcamp а также Учебный курс по Rails. Увидимся там ☺

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

Мой Середина, Твиттер, Гитхаб & LinkedIn. ☺

Похожие записи

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *