ruby on rails - сортировка коллекции моделей со сложной логикой - PullRequest
2 голосов
/ 13 июля 2011

У меня есть коллекция модели.Я хочу выполнить некоторую сложную логику сортировки в этой коллекции.Логика не так проста, как сортировка на основе простого атрибута.Какой наилучший способ (с точки зрения производительности и удобства обслуживания) выполнить сложную логику сортировки для коллекции моделей.Я думаю по линии передачи в блоке метода сортировки?Но я не уверен ...

Спасибо.

Ответы [ 2 ]

4 голосов
/ 13 июля 2011

Да, вы можете использовать блок, используя sort_by

@people.sort_by { |person| person.age }

sort_by использует преобразование Шварца внутренне в sort_by, так что если ваша логика немного сложнее, чемчто вы все равно можете создать функцию оценки и передать ее sort_by

@people.sort_by do |person|
  tier = if person.deceased?
    2
  elsif !person.important?
    1
  else
    0
  end
  [tier, person.age
end

Спросите себя, не можете ли вы выполнить сортировку непосредственно из SQL-запроса, это будет намного быстрее (при условии, чтоправильный запрос и индексы)

@people = Person.all(:select => "*, (age + popularity) as coolness", :order => "coolness")
1 голос
/ 13 июля 2011

Я бы посоветовал вам прочитать этот ресурс , в частности эту главу:

#21 Using Procs for Filtering (matching_members.rb)

Есть замечательные примеры фильтрации с использованием Procs и блоков.

PS: да, я бы использовал блоки, даже если ваш вопрос немного расплывчат.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...