Версии сортировки по умолчанию с papertrail

Я использую гем paper_trail в своем приложении Rails 4 и хочу установить порядок сортировки по умолчанию. papertrail не имеет модели, только контроллер и инициализатор.

Где я могу это разместить? Нужно ли создавать для него модель?

default_scope order('created_at DESC')

person Ossie    schedule 23.04.2014    source источник


Ответы (4)


Ну, я обнаружил, что могу просто использовать реверс в каждом блоке do.

versions.reverse.each

Поскольку мне не нужно ничего более сложного, я думаю, что на данный момент это подойдет.

person Ossie    schedule 24.04.2014
comment
Если у вас есть только небольшое количество версий, это все еще работает, но для больших объемов будет очень плохо для производительности. - person maxigs; 01.11.2014
comment
Я также использую ограничение, чтобы получить только последние 10 или около того версий, и этот метод не будет работать, потому что paper_trail, по-видимому, по умолчанию сортирует по created_at ASC. - person mscriven; 13.03.2015
comment
Это не работает с разбиением на страницы. Дэйв Т отвечает. versions.reorder(created_at: :desc) - person Julien; 13.10.2017

Также есть команда переупорядочить.

http://apidock.com/rails/ActiveRecord/QueryMethods/reorder

versions.reorder('created_at DESC')

Он заменит любой предыдущий заказ, тем самым игнорируя заранее определенный порядок Papertrail.

person Dave T    schedule 05.09.2016

Правильным способом было бы удалить предыдущую сортировку через unscope, а затем установить ее так, как вы хотите:

http://api.rubyonrails.org/classes/ActiveRecord/QueryMethods.html#method-i-unscope

Например:

somethings.version.merge(PaperTrail::Version.unscope(:order)).order('created_at DESC')

Это даст вам правильный запрос с правильной сортировкой

person maxigs    schedule 01.11.2014
comment
Интересный. Я не знал о unscope. Я попробую это. Спасибо. - person Ossie; 03.11.2014

найдите version.rb в геме paper_trail. каталог на моем компьютере, показанный ниже. добавлять:

scope :by_date_desc, lambda { unscope(:order).order('created_at DESC') }

unscope необходимо удалить предыдущий порядок в цепочке (спасибо, maxigs). используйте ваше любимое имя области действия, конечно. работал на меня.

C:\Ruby200\lib\ruby\gems\2.0.0\gems\paper_trail-4.0.0.beta2\lib\paper_trail\frameworks\active_record\models\paper_trail\version.rb

person user2315251    schedule 27.02.2015