Как вы обычно сортируете элементы в Rails?
У меня есть небольшой пример Rails-приложения, называемого билетами, который рассматривает и редактирует вымышленные билеты, проданные различным клиентам. В ticket_controller.rb внутри def index
у меня есть эта стандартная строка, созданная с помощью лесов:
@tickets = Ticket.find(:all)
Чтобы отсортировать билеты по названию, я нашел два возможных подхода. Вы можете сделать это следующим образом:
@tickets = Ticket.find(:all, :order => 'name')
... или следующим образом:
@tickets = Ticket.find(:all).sort!{|t1,t2|t1.name <=> t2.name}
(Совет. Документация Ruby объясняет, что sort!
будет изменять массив, который он сортирует, а не только sort
, который возвращает отсортированный массив, но оставляет исходный неизменным).
Какую стратегию вы обычно используете? Когда вы можете использовать .sort!
по сравнению с синтаксисом :order => 'criteria'
?
Ответы
Ответ 1
Используйте :order => 'criteria'
для чего-либо простого, что может быть сделано с помощью базы данных (то есть базового алфавитного или хронологического порядка). Скорее всего, это намного быстрее, чем позволить вашему Ruby-коду сделать это, предполагая, что у вас есть нужные индексы.
Единственный раз, когда я мог подумать, что вы должны использовать метод sort
, - это если у вас есть сложный атрибут, который был рассчитан во время выполнения и не хранится в базе данных, например, значение "достоверности", основанное на количестве хороших/плохих ответы или что-то еще. В этом случае лучше использовать метод sort
, но имейте в виду, что это повредит ситуацию, если у вас есть разбиение на страницы (каждая страница будет иметь результаты ITS в порядке, но набор страниц в целом будет отсутствовать порядок).
Ответ 2
Я указываю порядок в Finder ActiveRecord или в ассоциации модели, потому что сортировка с использованием SQL выполняется быстрее. Вы должны использовать возможности, предлагаемые СУРБД, когда вы в состоянии это сделать.
Ответ 3
Посмотрите https://github.com/mynameisrufus/sorted