scope :reports_to, lambda { |manager| joins(:admin_user).where('admin_users.manager_id = ?',manager.id) }
scope :pending, joins(:admin_request_status).where('admin_request_statuses.name = ?','Pending Approval')
scope :to_be_approved_by, lambda { |manager| self.pending.reports_to(manager) }
end
Примечание для всех.
Подобные цепочки областей обычно нормальны с точки зрения производительности, потому что «внешняя» или «начальная» область не будет оцениваться до тех пор, пока в примере не будет вызвана полная цепочка областей действия (например, scope_name1.scope_name2.scope_name3 и т. Д. И только когда фактический вывод необходим, если будет построен sql. Это известно как «отложенная загрузка» , например, «Будьте ленивыми, не создавайте результаты, пока они не потребуются».
Это в отличие от "нетерпеливой загрузки" , где вы используете оператор: include для получения других таблиц и выполнения множественных запросов "за один раз" и избегаете печально известной проблемы "n + 1", которая где программа завершает выполнение (например) 101 запроса, чтобы получить 100 записей.
Много интересной информации:)