Для Ruby on Rails, как вы используете will_paginate или Kaminari, когда данные выбираются из API? (по сети) - PullRequest
2 голосов
/ 01 апреля 2011

Кажется, что will_paginate и Kaminari очень тесно связаны с ActiveRecord?Если данные получены через API, например,

http://www.foo.com/fetch_data?type=products&offset=100&count=20

, то как вы можете использовать will_paginate или Kaminari для разбиения на страницы?Если нет, есть ли другие решения для нумерации страниц, которые могут работать в этой ситуации?

Ответы [ 2 ]

3 голосов
/ 01 апреля 2011

Я уже делаю нумерацию страниц для набора без AR для моего плагина act_as_indexed.

В вашем случае это будет работать примерно так:

def fetch(page=1, per_page=10)
  total_entries = 1000 # Or whatever method you choose to find the total entries.

  returning ::WillPaginate::Collection.new(page, per_page, total_entries) do |pager|
    url = "http://www.foo.com/fetch_data?type=products&offset=#{pager.offset}&count=#{pager.per_page}"

    results = fetch_example(url)# fetch the actual data here.

    pager.replace results
  end
end

Контроллер:

def index
  @records = fetch(params[:page])
end

Просмотров:

<%= will_paginate @records %>

Заполните ваши собственные методы для извлечения и обработки данных, а также для расчета общего количества записей.

0 голосов
/ 22 апреля 2015

Я написал свою собственную функцию для разбивки на массивы объектов. Вы можете изменить код в соответствии со своими потребностями:

def array_paginate page, per_page, array
  page = page.to_i
  per_page = per_page.to_i
  total_entries = array.count

  total_pages = (total_entries / per_page.to_f).ceil
  data = format_records( array[ (page-1)*per_page..page*per_page-1] )

  {
    page: page,
    total_pages: total_pages,
    data: data,
  }
end
...