Да, вы можете использовать блок, используя 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")