Следующий метод и ассоциация выполняют одно и то же. Они оба делают метод «active_students» доступным для текущей школы. Тем не менее, ассоциация использует 125 запросов, и метод использует 1. Метод использует eager-load, но ассоциация, похоже, больше подходит для рельсов.Rails 4 eager loading (ассоциация против метода) эффективность
Почему школьные данные настолько неэффективны по сравнению с построением запроса с учетной записи? Возможно ли поддерживать связь и использовать на ней нетерпеливую нагрузку? Является ли мой метод подходящим, или есть лучший способ приблизиться к этому?
# 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