Ruby Academy · Урок

Основы Active Record

Основы ORM

Урок 1 из 413 шагов

«Основы Active Record» — бесплатный урок Ruby Academy на CoddyKit. Это урок 1 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Ruby Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Ruby Academy содержит 4 уроков всего.

Что такое Active Record

Active Record — это слой ORM (сопоставления объектов с реляционными данными) в Rails. Он связывает объекты Ruby со строками таблицы базы данных, поэтому Вы работаете с объектами, а не с необработанными SQL-запросами.

  • Класс сопоставляется с таблицей.
  • Экземпляр сопоставляется со строкой.
  • Атрибут сопоставляется со столбцом.

Определение модели

Модель — это класс, наследующий от ApplicationRecord (который наследует от ActiveRecord::Base). По соглашению модель User автоматически сопоставляется с таблицей users.

class User < ApplicationRecord
end

# Maps to the 'users' table
# Columns become attributes automatically

Соглашения вместо конфигурации

Active Record использует соглашения об именовании, поэтому Вам требуется меньше настроек:

  • Имена классов стоят в единственном числе и записываются в CamelCase: User.
  • Имена таблиц стоят во множественном числе и записываются в snake_case: users.
  • По умолчанию первичным ключом служит id.

Следуйте соглашениям, и большая часть связей настроится автоматически.

Создание записей

Создавайте строки с помощью create или сначала создайте объект, а затем вызовите save. create создаёт экземпляр и сохраняет его за один вызов.

user = User.create(name: "Ada", email: "ada@example.com")

# Or in two steps:
other = User.new(name: "Linus")
other.email = "linus@example.com"
other.save

Чтение записей

Получайте записи с помощью методов поиска:

  • User.find(1) выполняет поиск по первичному ключу (вызывает ошибку, если запись не найдена).
  • User.find_by(email: 'a@b.com') выполняет поиск по любому столбцу (возвращает nil, если запись не найдена).
  • User.all возвращает все строки.
  • User.first и User.last возвращают первую и последнюю записи.
user = User.find(1)
admin = User.find_by(role: "admin")
everyone = User.all

Обновление записей

Измените атрибуты, а затем вызовите save или используйте update, чтобы одновременно присвоить значения и сохранить запись. update возвращает true или false в зависимости от результата проверки.

user = User.find(1)
user.update(name: "Ada Lovelace")

# Equivalent two-step form:
user.name = "Ada Lovelace"
user.save

Удаление записей

Удаляйте строки с помощью destroy (запускает обратные вызовы и обрабатывает связи) или delete (непосредственно выполняет SQL и пропускает обратные вызовы). Предпочитайте destroy, если у Вас нет причины обходить обратные вызовы.

user = User.find(1)
user.destroy

# Bulk destroy:
User.where(active: false).destroy_all

Атрибуты и отслеживание изменений

Active Record отслеживает несохранённые изменения. Такие методы, как changed?, changes и name_was, показывают, какие данные изменились до сохранения. Это полезно в обратных вызовах и при ведении журнала.

user = User.find(1)
user.name = "New Name"
puts user.changed?      # true
puts user.name_was      # old value
puts user.changes.inspect

Файл schema.rb

Active Record считывает структуру таблиц из базы данных, а не из модели. Текущая структура отражена в db/schema.rb, который создаётся на основе миграций. Обычно Вам не приходится редактировать его вручную.

Куда попадает SQL

Active Record незаметно для Вас превращает вызовы методов в SQL. User.find(1) превращается в SELECT * FROM users WHERE id = 1 LIMIT 1. Сгенерированный SQL можно просмотреть с помощью User.where(active: true).to_sql.

sql = User.where(active: true).to_sql
# => SELECT "users".* FROM "users" WHERE "users"."active" = TRUE

Зачем нужен ORM

Active Record предоставляет:

  • Код, не зависящий от конкретной базы данных (PostgreSQL, MySQL, SQLite).
  • Защиту от SQL-инъекций благодаря параметризованным запросам.
  • Понятный объектно-ориентированный доступ к данным.

Переходите к необработанному SQL только в особых случаях.

Быстрая проверка

Проверьте, насколько хорошо Вы поняли основы Active Record.

Итоги: основы Active Record

Вы изучили основы ORM:

  • Класс сопоставляется с таблицей, а экземпляр — со строкой.
  • Соглашения вместо конфигурации определяют правила именования.
  • CRUD: create, find/find_by, update, destroy.
  • Отслеживание изменений показывает несохранённые изменения.
  • Active Record создаёт для Вас безопасные SQL-запросы.

Далее Вы научитесь управлять схемой базы данных с помощью миграций.

Можно начать бесплатно

Изучай Ruby с ИИ-репетитором — бесплатно

Пиши и запускай код прямо в браузере, получай мгновенную помощь от ИИ-репетитора 24/7 и продолжи учиться на сайте или в приложении.

Курсы
29
Уроки
109

Часто задаваемые вопросы

Урок «Основы Active Record» бесплатный?

Да — полный текст урока «Основы Active Record» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Ruby Academy, подпишись на CoddyKit PRO. Курс Ruby Academy содержит 4 уроков всего.

Чему я научусь в уроке «Основы Active Record»?

Основы ORM Ты практикуешь Ruby Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать Ruby Academy?

Предыдущий опыт не требуется. Ruby Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 1 из 4.

Сколько времени занимает урок «Основы Active Record»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке Ruby Academy?

Да. Каждый урок Ruby Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Основы Active Record
  2. Миграции
  3. Связи
  4. Проверки и запросы
← Назад к Ruby Academy