Основы Active Record
Основы ORM
«Основы 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 — локальная установка не требуется.
Все уроки этого курса
- Основы Active Record
- Миграции
- Связи
- Проверки и запросы