Я добавить пользовательскую сортировку в модели ActiveRecord, определив метод, как это:По умолчанию Logical Сортировать по Resultset массива RubyOnRails
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 является частью include для активной загрузки, но я ничего не делаю с массивом объектов до представления (когда я делаю form.fields_for: my_class). Я действительно хочу, чтобы иметь возможность выполнять эквивалент default_scope, используя мой логический вид, но я не думаю, что это возможно. Прямо сейчас, мой единственный вариант, похоже, добавляет дополнительную строку в контроллер, чтобы сделать сортировку по этому результату, но это не похоже, что это правильно.
Есть ли что-то более элегантное, я здесь отсутствует?
Этот метод будет намного проще и DRY чем сортировка в контроллере. Но у него одинаковые проблемы сортировки в контроллере. А именно, время вычисления/использование памяти на больших наборах и сложности w.r.t. ограничение количества выбранных строк. И снова это вряд ли будет проблемой в определенных отношениях. – EmFi
Я попробовал несколько вариантов этого, что, учитывая обстоятельства конкретной ситуации, больше того, что я искал. Но я не смог сделать скачок того, как выполнить блок по умолчанию. Я не работал с анонимным блоком ассоциации, достаточным для того, чтобы действительно понять - помимо очевидного - как они работают, я полагаю. Спасибо, однако, за предложение. – tmo256