如何使用kaminari助手分页自定义资源?

我在rest API上查询了一些自定义资源。我想利用kaminari的分页视图助手(例如页面链接)。

我知道kaminari可以paginate array-like resources 在它们全部可用时,但是,我的资源一次查询和存储都非常昂贵。

wiyalala 回答:如何使用kaminari助手分页自定义资源?

发现本文很有帮助,但已过时:https://kirshatrov.com/2015/11/08/kaminari-custom-query/

最终编写了我自己的适配器:

class KaminariAdapter
  def initialize(page)
    @page = page.to_i
    @limit = 1
  end

  def entries(page)
    raise "Must be implemented by subclass"
  end

  def total_count
    raise "Must be implemented by subclass"
  end

  def entry_name(*arg)
    @entry_name ||= 'entry'.freeze
  end

  def current_page
    @page
  end

  def total_pages
    @total_pages ||= (total_count.to_f / @limit).ceil
  end

  def limit_value
    @limit
  end

  def offset
    (@page - 1) * @limit
  end

  def offset_value
    offset
  end

  def all
    entries(@page)
  end

  def size
    all.count
  end
end

儿童必须实现entries(page)total_count方法。这是一个示例:

class CustomPagination < KaminariAdapter
  def initialize(*args)
    super
    @all_entries = [1,2,3,4,5,6,7]
    @limit = 2
  end

  def entries(page)
    @all_entries[offset..(offset + @limit - 1)]
  end

  def total_count
    @all_entries.count
  end
end

可以这样使用:

test_controller.rb

def index
  @entries = CustomPagination.new(params[:page].to_i)
end

test/index.html.erb

<% @entries.all.each do |entry| %>
  <%= entry %>
<% end %> 

<%= paginate @entries %>
<%= page_entries_info @entries %>
本文链接:https://www.f2er.com/3012432.html

大家都在问