页数和记录数在您的示例中使用paginate(1, 10) 进行了硬编码,因此它始终会带回第 1 页的 10 条记录。您需要从查询字符串传递page=2 参数。这是通过params helper:
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
如果没有给出它们,我会为两者添加默认值。我了解you can do this via the library,例如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 %>
因此,从what I can see 开始,Sequel paginate 方法不会被覆盖或包装/重载,因此its method signature 与您仅使用 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 的 paginate 获得什么优势。我找不到让 Sinatra 助手工作的方法。