Подтвердить что ты не робот

Как вы обычно сортируете элементы в 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'?

4b9b3361

Ответ 1

Используйте :order => 'criteria' для чего-либо простого, что может быть сделано с помощью базы данных (то есть базового алфавитного или хронологического порядка). Скорее всего, это намного быстрее, чем позволить вашему Ruby-коду сделать это, предполагая, что у вас есть нужные индексы.

Единственный раз, когда я мог подумать, что вы должны использовать метод sort, - это если у вас есть сложный атрибут, который был рассчитан во время выполнения и не хранится в базе данных, например, значение "достоверности", основанное на количестве хороших/плохих ответы или что-то еще. В этом случае лучше использовать метод sort, но имейте в виду, что это повредит ситуацию, если у вас есть разбиение на страницы (каждая страница будет иметь результаты ITS в порядке, но набор страниц в целом будет отсутствовать порядок).

Ответ 2

Я указываю порядок в Finder ActiveRecord или в ассоциации модели, потому что сортировка с использованием SQL выполняется быстрее. Вы должны использовать возможности, предлагаемые СУРБД, когда вы в состоянии это сделать.