Какие есть методы у моделей в Rails? — Q&A Хекслет
2026-02-26 18:34 Diff

У моделей в рельсе есть следующие методы

Создание

admin = User.create(first_name: 'John', last_name: 'Doe', role: 'admin')

Чтение

users = User.all user = User.first user = User.find(1) user = User.find_by(id: 1) user = User.last users = User.where(name: 'John', is_admin: true).order(created_at: :desc)

Обновление

user = User.find(1) user.update(first_name: 'Jane', last_name: 'Doe') user = User.find(1) user.update!(first_name: 'Jane', last_name: 'Doe') User.where(is_active: true).update_all(is_active: false)

update_attribute обновляет один атрибут объекта и сохраняет изменения, игнорируя валидацию. Используйте его с осторожностью, так как он может привести к сохранению некорректных данных.

user = User.find(1) user.update_attribute(:first_name, 'Jane')

update_columns обновляет указанные атрибуты в базе данных, не вызывая валидацию и не обновляя временные метки

user = User.find(1) user.update_columns(first_name: 'Jane', last_name: 'Doe')

Удаление

user = User.find_by(name: 'John') user.destroy User.destroy_all

Запросы

User.where.not(role: :admin) User.where(role: :admin).or(User.where(role: :superuser)) User.order(:age) User.order(age: :desc) User.select(:first_name, :last_name) User.select(:last_name).distinct User.limit(15) User.limit(15).offset(30) User.group(:age).count User.none

Скоупы

Применение скоупа на выборку:

User.customers.where("age > ?", 45).select(:email)

Дефолтный скоуп:

class User < ApplicationRecord # ... scope :admins, -> { where(role: 'admin') } default_scope { admins } end # У модели установлен дефолтный скоуп, выбираются только админы User.all.count # 32 # Выбор пользователей без скоупов User.unscoped.all.count # 100