Какие есть методы у моделей в Rails?
Ответы
Nikolai Gagarinov
3 дня назад
У моделей в рельсе есть следующие методы
Создание
admin = User.create(first_name: 'John', last_name: 'Doe', role: 'admin')
user = User.new(first_name: 'Tom', last_name: 'Smith', role: 'customer')
user.save
Чтение
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
0
0