mongoid, will_paginate, сортировка не работает с критериями Mongoid DSL - PullRequest
3 голосов
/ 14 декабря 2010

Согласно readme из mongoid на github, я могу выполнять необычные запросы, такие как Person.select (: first_name,: last_name) .where (: title => "Sir"). Skip (10) .limit (10) .paginate

я пробовал это в сочетании с will_paginate (3.0.pre2)

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

---> отлично работает

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

---> сортировка больше не работает

я пробовал

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

-> не работает

, тогда

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

---> работает

НоЯ думаю, что функции поиска должны быть в модели, а не в контроллере!

1 Ответ

6 голосов
/ 15 декабря 2010

Решение:

Не используйте сортировку в paginate, используйте order_by().Например:

модель компании:

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

контроллер компании (индекс):

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