【发布时间】:2010-12-18 18:47:59
【问题描述】:
我是 Rails 新手,所以请放轻松。我已经建立了我的第一个博客,并希望将其设置为在 渲染帖子,我希望它只显示 10 个帖子,然后有一个链接可以查看下一个 10 个。
我希望这是一个简单的问题。如果您希望我发布任何代码,请告诉我。
【问题讨论】:
标签: ruby-on-rails ruby pagination blogs
我是 Rails 新手,所以请放轻松。我已经建立了我的第一个博客,并希望将其设置为在 渲染帖子,我希望它只显示 10 个帖子,然后有一个链接可以查看下一个 10 个。
我希望这是一个简单的问题。如果您希望我发布任何代码,请告诉我。
【问题讨论】:
标签: ruby-on-rails ruby pagination blogs
您应该使用 gem will_paginate。
安装使用真的很简单:https://github.com/mislav/will_paginate/wiki/installation
【讨论】:
查看will_paginate Gem。
在 ActiveRecord 模型上进行分页非常容易:
@posts = Post.paginate :page => params[:page], :order => 'created_at DESC'
在视图中,页面链接可以使用单个视图助手呈现:
<%= will_paginate @posts %>
【讨论】:
will_paginate 绝对是要走的路,我只是想添加一个指向railscasts will_paginate video 的链接,向您展示如何使用它,因为有时这比阅读文档更容易学习基础知识。另外,您将了解分页作为 Rails 包含的一部分时如何完成的简史(它更慢且更麻烦)。旧的经典分页也已移出到它自己的插件中,但仅当您将 Rails 升级到他们将其移除的版本时,才建议您使用它。
Railscasts 有大量其他精彩视频,您可能会觉得有帮助。例如,一旦你变得更高级,你可能想试试ajax pagination
【讨论】:
我在使用“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é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>
我希望这对某人有所帮助!
【讨论】:
我们可以使用 'will_paginate-bootstrap' gem 轻松做到这一点。
要继续,首先在 gem 文件中添加一行,
gem 'will_paginate-bootstrap'.
现在运行捆绑安装。
在控制器中,您将使用@post = Post.all 来获取
模型的内容。
而是使用这个
@post = Post.paginate(:page=>params[:page],per_page:5)
这里在上面一行per_page字段是指定你需要多少条记录 在一个页面中。
<%= will_paginate @post,renderer: BootstrapPagination::Rails %>
注意:我认为 Post 是模态的,而 post 是控制器中声明的变量。 只需使用您的变量即可。
【讨论】:
为 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
【讨论】:
will_paginate-bootstrap 不再维护,最后一次提交是在 07.11.2016
您可以使用 kaminari 宝石。
非常易于使用和高度定制友好。
【讨论】:
或者,小型、快速且积极维护:Pagy
【讨论】: