1

我正在使用 Sinatra 和 Ruby 1.9.3。

我有一个项目列表,并想对它们进行分页。我是 web 开发的新手,所以我不知道如何详细地做到这一点。

我不知道如何实现每个页面的链接,例如指向page2on的链接page1。我应该这样做:

<a href='?page=2'

我认为这不是一个好主意,因为它会覆盖我的其他参数,例如?searchterm=并且?sort=?它不会考虑现有?page=参数。

我的想法是使用与我的等相同的表单searchterm,并通过按钮和 JavaScript 更改值。但是,这似乎相当复杂,所有大型网站,包括 stackoverflow.com,都使用链接进行分页。

如何实现具有以下特点的分页:

  1. 转到另一个页面时包括其他参数。
  2. 覆盖现有?page=参数。
  3. 没有 Javascript(可选,但会很好)。
4

3 回答 3

4

您始终可以将必要的参数加载到实例变量中:

@page = params[:page] || 1

然后像以前一样使用它:

<a href="?page=#{@page + 1}&search_term=#{params[:searchterm]}"...
于 2012-12-03T18:35:30.377 回答
1

还有一个很受欢迎的 gem will_paginate,它会自动为你做一些这样的事情:https ://github.com/mislav/will_paginate 。与辛纳屈合作。

## Sinatra app:
require 'will_paginate'
require 'will_paginate/active_record'  # or data_mapper/sequel
于 2015-01-21T03:28:18.500 回答
1

您可以这样做,在@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
于 2012-12-03T19:07:17.780 回答