2010-12-14 64 views
3

Selon le readme de mongoid sur github je peux faire des requêtes de fantaisie comme Person.select (: first_name,: last_name) .where (: title => "Monsieur") .skip (10) .limit (10) .paginatemongoid, will_paginate, le tri ne fonctionne pas avec les critères de Mongoid DSL

J'ai essayé en combinaison avec will_paginate (3.0.pre2)

@companies = Company.paginate(:per_page=>5, :page=>params[:page], :sort => [sort_column, sort_direction]) 

---> fonctionne très bien

@companies = Company.all.paginate(:per_page=>5, :page=>params[:page], :sort => [sort_column, sort_direction]) 

- -> trier faire travail esnt plus

j'ai essayé

@companies = Company.where(:name=>/^#{params[:search]}/).paginate(:per_page=>5, :page=>params[:page], :sort => [sort_column, sort_direction]) 

-> travail ne marche pas

puis

@companies = Company.paginate(:conditions=>{:name=>/^#{params[:search]}/}, :per_page=>5, :page=>params[:page], :sort => [sort_column, sort_direction]) 

---> fonctionne

Mais je pense que les fonctions de recherche devraient être le modèle n'est pas dans le contrôleur! ?

Répondre

6

Solution:

Ne pas utiliser tri dans paginera, utilisez order_by() à la place. Par exemple:

modèle de l'entreprise:

def self.search(search) 
    if !search.blank? 
    where(:name => /^#{search}/) 
    else 
    all 
    end 
end 

contrôleur de l'entreprise (indice):

@companies = Company.search(params[:search]).order_by([sort_column, sort_direction]).paginate(:per_page=>5, :page=>params[:page])