2011-11-20 48 views
1

我遇到了分页问题。rails 3,will_paginate在现有的有限活动记录结果

我在我的模型中定义为范围的查询:

scope :published_and_valid, joins(...).where(...) 

在我的控制器有时我只是希望能有前20

.limit(20) 

现在我希望能够进行分页在这20个结果(5每页)

我尝试这样做:

@articles = Article.published_and_valid.limit(20).paginate(:page => params[:page]) 

这不作为的结果在我看来,工作是所有文章

+0

你安装了什么版本的will_paginate? (如果有疑问,请检查你的'Gemfile.lock')。 –

+0

版本是3.0.2 – hereandnow78

回答

7

它看起来像will_paginate强加给你的关系了自己limit条款,以做寻呼pagineted结果。经过一番实验后,我能找到的最简单的方法就是尽快加载结果集,并使用the array extensions中包含的功能进行实际的分页。

下面是一个简单的例子;请注意,您必须要求will_paginate/array;你可能希望在初始化程序或其他地方执行此操作。请注意,它有monkey-patch Array以拥有paginate方法。

require 'will_paginate/array' 

class ArticlesController < ApplicationController 
    def index 
    @articles = Article.published.limit(20).all # call `all` to eager load 
    @articles = @articles.paginate(:page => params[:page], :per_page => 10) 
    end 
end 

[更新]

另一种选择是在total_entires选项传递给will_paginate基于所述结果集的大小。

class ArticlesController < ApplicationController 
    def index 
    @articles = Article.published.limit(20) 
    @articles = @articles.paginate(:page => params[:page], :per_page => 10, :total_entries => @articles.count) 
    end 
end 

您无法传入20,因为您无法保证将返回完整的20个结果;通过传递count属性,可以确保分页是正确的。

+0

ty brandon的工作就像一个魅力,这正是我正在寻找 – hereandnow78

相关问题