首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用named_scopes的will_paginate

使用named_scopes的will_paginate
EN

Stack Overflow用户
提问于 2010-05-08 06:45:29
回答 3查看 6.4K关注 0票数 16

我正在使用will_paginate进行分页,到目前为止,它一直运行得很好,除了这一点。

例如,如果我试图对一个作用域分页

class User < ActiveRecord::Base

    named_scope :scope, lambda { etc }

end

User.scope.paginate({:page => params[:page], :per_page => 10})

这将告诉我分页是一个未定义的方法。我不希望只在这个范围内使用第二种解决方案,这里有什么我可以做的吗?

EN

回答 3

Stack Overflow用户

发布于 2010-05-08 07:09:29

我有一个定义如下的named_scope

 named_scope :look_for, lambda { |search| bla;bla;bla }

我称之为:

 Person.look_for(params[:search]).paginate :page => params[:page]

而且它是有效的。也许你的作用域需要一些参数?

票数 2
EN

Stack Overflow用户

发布于 2010-05-08 07:58:21

这是个奇怪的解决方案,但是

User.scope.find(:all).paginate :page => params[:page], :per_page => 10

管用吗?

票数 2
EN

Stack Overflow用户

发布于 2010-05-15 23:58:26

Lowgain,这听起来不像是,但只是为了确保--您实际上不是在使用名为scope的named_scope进行测试,对吧?因为scope是一个现有的方法,使用它作为你的作用域名会导致一个错误(和一个无限循环)。

编辑:

您的named_scope是否恰好包含:limit子句?我刚开始遇到类似的问题。我有一个belongs_to用户的模型响应,命名作用域如下:

named_scope :top, lambda { |limit| {
            :limit => limit,
            :order => 'total_score DESC' }}

我在控制台中看到了这样的结果:

?> u = User.find 1
?> u.responses.length
=> 9
?> u.responses.paginate(:page => 1, :per_page => 5).length
=> 5
?> u.responses.top(3).length
=> 3
?> u.responses.top(3).paginate(:page => 1, :per_page => 5).length
=> 5

呀!如何对前3行进行分页以生成3行以上的行?根据你的例子,我尝试了你的find(:all)技巧,得到了类似的结果:

?> u.responses.top(3).find(:all).paginate(:page => 1, :per_page => 5).length
=> 3

这看起来像是named_scope中的一个bug,因为我可以把will_paginate从图片中去掉,然后发生类似的混乱:

?> u.responses.top(3).length
=> 3
?> u.responses.top(3).size
=> 9                       <-- .size produces wrong answer
?> r = u.responses.top(3)
?> r.size
=> 3                       <-- correct when result assigned to var

到目前为止,这似乎只在我使用MySQL时发生。我想我在StackOverflow上读到了另一篇文章,其中有人在AR结果和MySQL中使用.size时遇到了类似的问题,解决方案是在AR结果中始终使用.length。我曾尝试修改will_paginate,将.size的所有实例替换为.length,但遗憾的是,事情并没有那么简单,但我怀疑这个或类似的问题正以某种方式影响着will_paginate。

目前,我使用您的find(:all)技巧来解决这个问题。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2792119

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档