ActiveRecord Relation - это лениво загружаемый объект, представляющий собой набор записей из базы данных. Он хранит условия запроса (WHERE, ORDER BY, LIMIT и т.д.), но не выполняет запрос до тех пор, пока не потребуется доступ к данным.
Основные свойства:
- Ленивая загрузка: Запрос к базе данных выполняется только при первой необходимости (например, при итерации по коллекции или вызове метода
.to_a).
- Цепочка методов: Можно последовательно вызывать методы для добавления условий к запросу (например,
User.where(active: true).order(:created_at)).
- Изменяемость: Relation можно изменять, добавляя или удаляя условия, до момента выполнения запроса.
- Интерфейс Array-like: Relation ведет себя как массив, поддерживая множество методов, характерных для массивов.
Пример:
ruby
Преимущества использования Relation:
- Эффективность: Запросы к базе данных выполняются только при необходимости, что улучшает производительность.
- Читаемость: Цепочка методов делает запросы более понятными.
- Гибкость: Возможность изменять условия запроса до выполнения.
Несмотря на схожесть с массивами, Relation имеет некоторые отличия:
- Не кэширует данные: Каждый раз при обращении к данным Relation может выполнять запрос заново (если не использовать
.to_a).
- Не поддерживает все методы Array: Некоторые специфичные методы массива могут отсутствовать.