在Ruby on Rails中为index.html.erb添加分页 - 简单问题

时间:2009-11-20 15:38:32

标签: ruby-on-rails ruby pagination blogs

我是铁杆新手,所以请轻松一点。我已经构建了我的第一个博客,并希望将其设置为<%post.each do | post | %GT;渲染帖子,我希望它能够显示10个帖子然后有一个链接来查看下一个帖子。

我希望这是一个简单的问题。如果您希望我发布任何代码,请告诉我。

7 个答案:

答案 0 :(得分:7)

您应该使用gem will_paginate

安装和使用非常简单:http://wiki.github.com/mislav/will_paginate/installation

使用示例:http://github.com/mislav/will_paginate

答案 1 :(得分:6)

will_paginate绝对是要走的路,我只是想我会添加一个指向railscasts will_paginate video的链接,向您展示如何使用它,因为有时这可能比学习基础更容易。阅读文档。另外,您将学习关于如何在Rails包含的部分中进行分页的简短历史(它更慢且更麻烦)。旧的经典分页也被移植到它自己的插件中,但只有当你将Rails升级到他们把它拿出来的版本时才推荐使用它。

Railscasts有很多其他很棒的视频,你可能会觉得有用。例如,一旦你获得更高级,你可能想尝试ajax pagination

答案 2 :(得分:4)

查看will_paginate宝石。

在ActiveRecord模型上进行分页非常容易:

@posts = Post.paginate :page => params[:page], :order => 'created_at DESC'

在视图中,页面链接可以使用单个视图助手进行渲染:

<%= will_paginate @posts %>

答案 3 :(得分:4)

我在使用“will_paginate”时遇到了问题,安装GEM然后解决了......真正的问题!所以我决定在RoR上编写分页,这并不难,所以我想分享我的所作所为:

<强>控制器:

  def index
#how many register per page i want to show
    @b = 30 
#params via GET from URL
    a = params[:page].to_i
#first register per page
    a1 = params[:page].to_i * @b
#the query can be easy...
    @callcenters = Income.all(:joins => "LEFT JOIN radcheck ON radcheck.id = incomes.radcheck_id", :order => "created_at DESC",:limit => "#{a1},#{@b}", :select => "radcheck.username as clave,caller_id, created_at, value")
#I need to know how many pages somehow
     @registrostotales = Income.all(:joins => "LEFT JOIN radcheck ON radcheck.id = incomes.radcheck_id", :select => "radcheck.username as clave,caller_id, created_at, value").count

    respond_to do |format|
      format.html # index.html.erb
      format.xml  { render :xml => @callcenters }
    end
  end

查看:

...
Total de registros: <%= numero = @registrostotales %><br/><br/>
<!-- total pages -->
<% pages = @registrostotales / @b %>
<!-- the last page -->
<% if pages % @b > 0 %><% pages = pages + 1 %><% end %>

Paginas:
<% (0..(pages-1)).each do |i| %>
<!-- href or link_to, http://xxxxxxxx/yyyy?page=i -->
  <%= link_to i+1, :action => "index", :controller => "callcenters", :page => i %>
<% end %>


<!-- the view.. -->
<table>
  <tr>
    <th>#</th>
    <th>Tel&eacute;fono (ID)</th>
    <th>Zona</th>
  </tr>

<% @callcenters.each do |callcenter| %>
  <tr>
    <td><%= numero - params[:page].to_i * 30 %><% numero = numero  - 1 %></td>
    <td><%= callcenter.caller_id %></td>
    <td><%= Node.first(:conditions => {:calling_id => callcenter.caller_id}).description %></td>
  </tr>
<% end %>
</table>

我希望这对某人有帮助!

最诚挚的问候, ivancarrascoq

答案 4 :(得分:4)

向Ruby on Rails应用添加分页

要将分页添加到Ruby on Rails应用中,您必须修改以下文件:

宝石文件:

gem 'will_paginate', '~> 3.1.0'
gem 'will_paginate-bootstrap'

区域控制器->索引

@areas = Area.pagination_request(params[:page])

index.html.erb

<%= will_paginate @areas, renderer: BootstrapPagination::Rails %>

模型文件:

def self.pagination_request(page)
    paginate :per_page => 10, :page => page
end

答案 5 :(得分:1)

我们可以使用'will_paginate-bootstrap'gem轻松完成此任务。

  1. 首先要继续为gem文件添加一行

    gem 'will_paginate-bootstrap'

    现在运行bundle install。

  2. 在控制器中,您将使用@post = Post.all来获取 模特的内容。 而是使用此

  3. @post = Post.paginate(:page=>params[:page],per_page:5)

    在上面的行中,per_page字段用于指定所需的记录数    在页面中。

    1. 在index.html.erb中 在代码结束时,即在结束body标签之前 添加此内容,
    2. <%= will_paginate @post,renderer: BootstrapPagination::Rails %>

      注意:我认为Post为模态,并在控制器中声明为变量。       只需使用您的变量。

答案 6 :(得分:0)

您可以使用kaminari宝石。

非常易于使用并且高度定制友好。