Реализуйте сортировку как метод класса в Ruby - PullRequest
2 голосов
/ 01 марта 2012

ActiveRecord возвращает мне набор пользователей. Я хочу отсортировать этих пользователей по сложной функции, которая использует данные, не сохраненные в объекте User.

Есть ли способ использовать область, когда данные не сохраняются?

Есть ли способ написать функцию сортировки как метод класса, чтобы я мог сделать такой вызов:

sorted_users = User.first(20).sorted_my_way

1 Ответ

3 голосов
/ 02 марта 2012

я думаю, что это невозможно сделать таким образом.

можно определить методы класса и области, которые можно вызывать как User.first(20).sorted_my_way, но они могут только добавлять материал в создаваемый вами запрос.если вы хотите отсортировать в ruby, я думаю, что вам нужно обернуть весь материал, например:

class User
  self.sorted_my_way(limit)
    first(20).sort_by {...}
  end
end
User.sorted_my_way(20)

Еще одна вещь, которую вы могли бы сделать, это использовать метод стиля блока:

class User
  self.sorted_my_way
    yield.sort_by {...}
  end
end
User.sorted_my_way { first(20) }
...