Числа для страницы и количество записей жестко закодированы в вашем примере с использованием 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
Я не замечал, прежде чем вы также использовали помощник Sinatra, предоставленный will_paginate.
Я бы либо вызвал 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 %>
Итак, из того, что я вижу, метод Sequel paginate
не перезаписывается, не обертывается/не перегружается, поэтому его сигнатура метода такая же, как если бы вы использовали 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 по сравнению с paginate Sequel. Я не мог найти способ заставить работать помощника Синатры.
person
iain
schedule
06.06.2013