mongoid,will_paginate,排序不适用于Mongoid标准DSL

baj*_*baj 3 sorting will-paginate mongoid

根据github上mongoid的自述文件,我可以做一些奇特的查询,比如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])
Run Code Online (Sandbox Code Playgroud)

--->工作正常

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

--->排序不再起作用了

我试过了

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

- >不起作用

然后

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

--->工作

但我认为搜索功能应该在模型中而不是在控制器中!?

baj*_*baj 6

解:

不要在paginate中使用sort,order_by()而是使用.例如:

公司型号:

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

公司控制人(指数):

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