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

发布于 2024-10-07 17:13:27 字数 983 浏览 4 评论 0原文

根据 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])

---> ;工作正常

@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])

--->有效

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

According to the readme of mongoid on github i can do fancy queries like
Person.select(:first_name, :last_name).where(:title => "Sir").skip(10).limit(10).paginate

i tried this in combination with will_paginate (3.0.pre2)

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

---> works fine

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

---> sorting doesnt work anymore

i tried

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

--> doesnt work

then

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

---> works

But i think search functions should be in the model not in the controller! ?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

冰之心 2024-10-14 17:13:27

解决方案:

不要在分页中使用排序,而是使用 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])

Solution:

Don't use sort in paginate, use order_by() instead. For example:

company model:

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

company controller (index):

 @companies = Company.search(params[:search]).order_by([sort_column, sort_direction]).paginate(:per_page=>5, :page=>params[:page])
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文