Проверки и запросы
Целостность данных и запросы
«Проверки и запросы» — бесплатный урок Ruby Academy на CoddyKit. Это урок 4 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Ruby Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Ruby Academy содержит 4 уроков всего.
Зачем нужны проверки
Проверки защищают ваши данные до того, как они попадут в базу данных. Они выполняются при сохранении записи и отклоняют недопустимые данные, сообщая понятные причины.
- Они не пропускают некорректные данные (отсутствующие имена, неверно сформированные адреса электронной почты).
- Они выполняются в Ruby, поэтому сообщения легко показывать пользователям.
- Они дополняют ограничения базы данных, а не заменяют их.
Проверка наличия
Самое распространённое правило — validates :field, presence: true: оно требует непустого значения. Сохранение записи без этого значения завершается неудачей и добавляет ошибку.
class User < ApplicationRecord
validates :name, presence: true
end
# User.create(name: "") fails to saveПроверка уникальности
uniqueness: true предотвращает повторяющиеся значения, например одинаковые адреса электронной почты у двух пользователей. Используйте это правило вместе с уникальным индексом базы данных, поскольку сама проверка подвержена состоянию гонки при высокой конкуренции.
class User < ApplicationRecord
validates :email, presence: true, uniqueness: true
endФормат и длина
Другие встроенные средства проверки:
length: { minimum: 8 }для ограничения размера.format: { with: /regex/ }для проверки шаблонов.numericality: trueдля чисел.inclusion: { in: [...] }для разрешённых значений.
class User < ApplicationRecord
validates :password, length: { minimum: 8 }
validates :age, numericality: { greater_than: 0 }
endvalid? и errors
Вызовите valid?, чтобы выполнить проверки без сохранения записи. После неудачного сохранения record.errors содержит сведения о проблемах, а errors.full_messages возвращает понятные строки для пользовательского интерфейса.
user = User.new(name: "")
if user.valid?
user.save
else
puts user.errors.full_messages
endsave против save!
Оба варианта сохранения:
saveвозвращаетtrue/false, поэтому результат можно проверить условием.save!при ошибке вызывает исключениеRecordInvalid; это удобно, когда недопустимые данные должны приводить к исключению.
Тот же подход действует для create/create! и update/update!.
user.save # => false if invalid
user.save! # => raises if invalidПользовательские проверки
Для правил, которых нет среди встроенных, напишите метод и зарегистрируйте его с помощью validate. Добавляйте ошибки через errors.add.
class User < ApplicationRecord
validate :name_not_admin
def name_not_admin
if name == "admin"
errors.add(:name, "cannot be admin")
end
end
endЗапросы с where
Интерфейс запросов начинается с where, который фильтрует строки. Он возвращает ленивое отношение, к которому можно добавить другие методы до обращения к базе данных.
User.where(active: true)
User.where("age > ?", 18)
User.where(role: ["admin", "editor"])Сортировка и ограничение количества
Формируйте результаты с помощью методов, которые можно объединять в цепочку:
order(created_at: :desc)сортирует результаты.limit(10)иoffset(20)разбивают результаты на страницы.select(:id, :name)выбирает столбцы.
User.where(active: true)
.order(created_at: :desc)
.limit(10)Агрегаты и ленивая загрузка
Агрегатные вспомогательные методы вызывают функции базы данных: count, sum(:amount), average(:age), maximum, minimum. Отношения являются ленивыми: запрос выполняется только при переборе результатов, вызове агрегатного метода или использовании to_a.
User.where(active: true).count
Order.sum(:total)
User.average(:age)Области запросов
Область запроса даёт имя повторно используемому запросу, чтобы его можно было удобно комбинировать. Области возвращают отношения и объединяются друг с другом, а также с where.
class User < ApplicationRecord
scope :active, -> { where(active: true) }
scope :adults, -> { where("age >= ?", 18) }
end
User.active.adultsБыстрая проверка
Проверьте, насколько хорошо вы поняли проверки и запросы.
Повторение: проверки и запросы
Вы научились защищать и получать данные:
- Проверки наличия, уникальности, длины и формата защищают операции сохранения.
valid?иerrorsсообщают об ошибках, аsave!вызывает исключение.- Пользовательские проверки позволяют задавать особые правила.
where,order,limit, агрегаты и области запросов создают ленивые запросы.
На этом курс «Модели и Active Record» завершён.
Часто задаваемые вопросы
Урок «Проверки и запросы» бесплатный?
Да — полный текст урока «Проверки и запросы» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Ruby Academy, подпишись на CoddyKit PRO. Курс Ruby Academy содержит 4 уроков всего.
Чему я научусь в уроке «Проверки и запросы»?
Целостность данных и запросы Ты практикуешь Ruby Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Ruby Academy?
Предыдущий опыт не требуется. Ruby Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 4 из 4.
Сколько времени занимает урок «Проверки и запросы»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Ruby Academy?
Да. Каждый урок Ruby Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Основы Active Record
- Миграции
- Связи
- Проверки и запросы