К сожалению, это невозможно.
Способ работы с именованными областями заключается в "ленивом" создании комбинированного набора параметров SQL, которые не оцениваются, пока вы на самом деле не попытаетесь что-то с ними сделать.Так, например, следующая цепочка именованных областей:
people = Person.tallest.youngest
вызовет , а не , что приведет к выполнению любого запроса к базе данных, на самом деле объект ActiveRecord::NamedScope
будет сохранен в people
переменная.Только когда вы обращаетесь к этому объекту или выполняете итерацию по нему, запускается SQL и загружаются объекты.
Ваша проблема в том, что ваш метод сортировки не выражается в SQL, это набор условий Ruby.Когда Rails добирается до вашего sort_by
, он должен пойти и извлечь и создать экземпляры объектов Person
, чтобы он мог выполнить ваши условия на них.После этого у вас будет Array
объектов, а не NamedScope
объектов.