Я добавил пользовательскую сортировку в модель ActiveRecord, определив метод, подобный следующему:
class MyClass < ActiveRecord::Base
belongs_to :parent_model #this would be the many in a has_many relationship
def <=>(other)
self.att <=> other.att
end
end
Достаточно сказать, что логика, фактически используемая в сравнении, немного сложнее, чем этот пример, и не может быть реализована с помощью SQL.
Поскольку этот класс используется только как вложенные поля в охватывающей модели, кажется, нет простого места для сортировки набора результатов. В контроллере: my_class является частью включения для быстрой загрузки, но я ничего не делаю с массивом объектов до представления (когда я выполняю form.fields_for: my_class). Что я действительно хочу, так это иметь возможность сделать эквивалент default_scope, используя мою логическую сортировку, но я не думаю, что это возможно. Прямо сейчас, моя единственная возможность, кажется, добавить дополнительную строку в контроллере, просто чтобы выполнить сортировку по этому результату, но это не похоже на то, что это правильно.
Есть ли здесь что-то более элегантное, что мне не хватает?