我正在使用will_paginate进行分页,到目前为止,它一直运行得很好,除了这一点。
例如,如果我试图对一个作用域分页
class User < ActiveRecord::Base
named_scope :scope, lambda { etc }
end
User.scope.paginate({:page => params[:page], :per_page => 10})
这将告诉我分页是一个未定义的方法。我不希望只在这个范围内使用第二种解决方案,这里有什么我可以做的吗?
发布于 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]
而且它是有效的。也许你的作用域需要一些参数?
发布于 2010-05-08 07:58:21
这是个奇怪的解决方案,但是
User.scope.find(:all).paginate :page => params[:page], :per_page => 10
管用吗?
发布于 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)技巧来解决这个问题。
https://stackoverflow.com/questions/2792119
复制相似问题