我正在使用Sinatra和Ruby 1.9.3。
我有一个项目列表,想要对它们进行分页。我是网络开发的新手,所以我不知道如何详细地做到这一点。
我不知道如何为每个网页实施链接,例如page2
上page1
的链接。我应该这样做:
<a href='?page=2'
我认为这不是一个好主意,因为它会覆盖我的其他参数,例如?searchterm=
和?sort=?
,并且不会考虑现有的?page=
参数。
我的想法是使用与searchterm
等相同的表单,并通过按钮和JavaScript更改值。但是,这似乎相当复杂,所有大型网站,包括stackoverflow.com,都使用链接进行分页。
如何实现具有以下功能的分页:
?page=
参数。答案 0 :(得分:4)
您始终可以将必要的参数加载到实例变量中:
@page = params[:page] || 1
然后像你一样使用它:
<a href="?page=#{@page + 1}&search_term=#{params[:searchterm]}"...
答案 1 :(得分:1)
还有一个名为will_paginate
的流行宝石,它会自动为您完成一些这样的工作:https://github.com/mislav/will_paginate。与Sinatra合作。
## Sinatra app:
require 'will_paginate'
require 'will_paginate/active_record' # or data_mapper/sequel
答案 2 :(得分:0)
你可以这样做,在@ ChuckE的回答中添加一点:
# Controller
def index
# ...
@models = MyModel.find(:yourquery)
if params[:page]
page = params[:page].to_i
@models = @models[(page * 10)..(page + 10)] # Selecting an slice out of the @models array
end
end
# In your view
- @model.each do |item|
=# do stuff
= link_to "Next Page", "?page=#{@page + 1}"
= link_to "Next Page", "?page=#{@page - 1}" unless @page = 1