2011-09-18 3 views
2

J'ai un modèle:MetaSearch sorte commandé colonne

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

Il existe un lien de tri dans un fichier de vue:

= sort_link @search, :date_begin 

Quand je suis en train de commander DATE_BEGIN comme rien DESC arrive parce que le La requête SQL est:

SELECT * FROM events ORDER BY date_begin, date_begin DESC 

Comment faire pour que MetaSearch réorganise cette colonne? (Je sais qu'il ya une méthode « Réorganiser » ActiveRecord mais je ne sais pas comment l'appliquer à MetaSearch)

Répondre

1

Vous pouvez utiliser la méthode unscoped lorsque vous avez décidé d'utiliser meta_search:

@search = Event.unscoped.search(params[:search]) 
+0

Mais je veux utiliser les étendues et l'ordre par défaut par date et juste réorganiser par la colonne date_begin lorsque l'utilisateur clique sur le "sort_link". C'est possible? –

0

I voulait aussi utiliser un ordre de tri par défaut, et ne pas comprendre autrement que d'appliquer un ordre par défaut dans le contrôleur, ne pas utiliser de champ de commande dans le modèle:

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

le tri par défaut commande est created_at DESC, mais il va être overw Ritten si un nouvel ordre de tri est reçu dans les params. Ça semble fonctionner pour moi.

0
@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 

Avantages:

1) n'ANNULE: champ d'application de commande - utile si vous avez .où (: deleted_at => nil) .order (: DATE_BEGIN) portée par défaut. 2) utilise l'ordre par défaut lorsque le tri Ransack n'est pas appliqué.