Эффективность загрузки Rails 4 (ассоциация против метода)

77
7

Следующий метод и ассоциация выполняют одно и то же. Они оба делают метод "active_students" доступным для текущей школы. Тем не менее, ассоциация использует 125 запросов, и метод использует 1. Метод использует eager-load, но ассоциация, похоже, больше подходит для рельсов.

Почему школьные данные настолько неэффективны по сравнению с построением запроса с учетной записи? Возможно ли поддерживать связь и использовать на ней нетерпеливую нагрузку? Является ли мой метод подходящим, или есть лучший способ приблизиться к этому?

  # application_controller

def active_students # 1 query
# used by simply calling active_students
Account.includes(:role, {user: :school}).where(status: 0).where("roles.name = ?", 'student').where("users.school_id = ?", current_school.id).references(:role, :user, :school)
end

против
  # school.rb
# used by calling current_school.active_students
# 125 queries

has_many :active_students, -> { joins(:role).where( "roles.name = ? AND accounts.status = ?", "student", 0 ) }, source: :accounts, through: :users

спросил(а) 2021-01-25T19:40:02+03:00 4 месяца, 4 недели назад
1
Решение
78
ответил(а) 2021-01-25T19:40:02+03:00 4 месяца, 4 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема