页数和记录数在您的示例中使用 硬编码paginate(1, 10)
,因此它始终会带回第 1 页的 10 条记录。您需要page=2
从查询字符串传递参数。这是通过params
助手完成的:
get '/candidate' do
@items = DB[:candidates].order(:id).paginate(:page => params["page"].to_i, :per_page => 10)
erb :candidate
end
如果您愿意,您还可以通过添加以下代码来传递per_page
查询字符串中的 :
get '/candidate' do
@items = DB[:candidates].order(:id).paginate(:page => params["page"].to_i, :per_page => params["per_page"].to_i)
erb :candidate
end
如果没有给出它们,我会为两者添加默认值。我知道你可以通过图书馆来做到这一点,例如WillPaginate.per_page = 10
,但你也可以在路线中做到这一点,通过:
get '/candidate' do
page = params.fetch "page", 1
per_page = params.fetch "per_page", 10
@items = DB[:candidates].order(:id).paginate(:page => page.to_i, :per_page => per_page.to_i)
erb :candidate
end
在您还使用 will_paginate 提供的 Sinatra 助手之前,我没有注意到。
我要么调用paginate
数据集,要么获取一个未分页的数据集,然后将其传递给助手。所以要么这样:
get '/candidate' do
page = params.fetch "page", 1
per_page = params.fetch "per_page", 10
@items = DB[:candidates].order(:id).paginate(:page => page.to_i, :per_page => per_page.to_i)
erb :candidate
end
# in the view
<%= @items %>
或这个:
get '/candidate' do
@items = DB[:candidates].order(:id)
erb :candidate
end
# in the view
<%= will_paginate @items, params %>
因此,据我所知,Sequelpaginate
方法没有被覆盖或包装/重载,因此它的方法签名与您仅使用 Sequel 而不是 will_paginate 时的方法签名相同。这意味着这段代码对我有用:
require 'will_paginate'
require 'will_paginate/sequel'
get '/candidate' do
page = params.fetch "page", 1
per_page = params.fetch "per_page", 10
@items = Repo.db[:candidates].order(:id).paginate(page.to_i, per_page.to_i)
haml :candidate
end
在 Haml 视图中:
- @items.each do |i|
= i[:title]
由于方法签名是相同的,我不确定使用 will_paginate 比使用 Sequel 的分页获得什么优势。我找不到让 Sinatra 助手工作的方法。