MetaSearch сортирует упорядоченный столбец

У меня есть модель:

class Event < ActiveRecord::Base
  default_scope :order => 'date_begin'
end

В файле представления есть ссылка на сортировку:

= sort_link @search, :date_begin

Когда я пытаюсь заказать date_begin как DESC, ничего не происходит, потому что SQL-запрос:

SELECT * FROM events ORDER BY date_begin, date_begin DESC

Как заставить MetaSearch переупорядочить этот столбец? (Я знаю, что в ActiveRecord есть метод "переупорядочивания", но я не знаю, как применить его к MetaSearch)


person Aleksandr Shvalev    schedule 18.09.2011    source источник


Ответы (3)


Вы можете использовать метод unscoped, когда решили использовать meta_search:

@search = Event.unscoped.search(params[:search])
person Vasiliy Ermolovich    schedule 18.09.2011
comment
Но я хочу использовать области и порядок по умолчанию по дате и просто переупорядочивать по столбцу date_begin, когда пользователь нажимает ссылку sort_link. Является ли это возможным? - person Aleksandr Shvalev; 18.09.2011

Я также хотел использовать порядок сортировки по умолчанию и не нашел другого способа, кроме как применить порядок по умолчанию в контроллере, не используя какую-либо область упорядочения в модели:

search = {"meta_sort" => "created_at.desc"}.merge(params[:search] || {})
@search = Photo.search(search)

Порядок сортировки по умолчанию — created_at DESC, но он будет перезаписан, если в параметрах будет получен новый порядок сортировки. Кажется, работает для меня.

person Fredrik Boström    schedule 14.12.2011

@search = if params[:q] && params[:q][:s]
  # Ransack sorting is applied - cancel default sorting
  Event.reorder(nil).search(params[:q])
else
  # Use default sorting
  Event.search(params[:q])
end

Преимущества:

1) отменяет только область :order - полезно, если у вас есть область .where(:deleted_at => nil).order(:date_begin) по умолчанию.

2) использует порядок по умолчанию, когда сортировка Ransack не применяется.

person Tatiana Tyu    schedule 16.09.2012