Module: PagyInfiniteScroll::ControllerHelper

Extended by:
ActiveSupport::Concern
Defined in:
lib/pagy_infinite_scroll/controller_helper.rb

Instance Method Summary collapse

Instance Method Details

#pagy_infinite_scroll(collection, **options) ⇒ Array<Pagy, Array>

Pagy with infinite scroll support

Examples:

@pagy, @products = pagy_infinite_scroll(Product.all)

With custom options

@pagy, @products = pagy_infinite_scroll(Product.all, limit: 25)

Parameters:

  • collection (ActiveRecord::Relation)

    The collection to paginate

  • options (Hash)

    Options for pagy and infinite scroll

Returns:

  • (Array<Pagy, Array>)

    The pagy object and paginated collection



32
33
34
35
36
37
# File 'lib/pagy_infinite_scroll/controller_helper.rb', line 32

def pagy_infinite_scroll(collection, **options)
  options[:limit] ||= PagyInfiniteScroll.config.items_per_page
  pagy, records = pagy(collection, **options)

  [pagy, records]
end

#pagy_infinite_scroll_json(pagy, records, &serializer) {|record| ... } ⇒ Hash

Respond with infinite scroll format

Examples:

Basic usage

respond_to do |format|
  format.html
  format.json do
    render json: pagy_infinite_scroll_json(@pagy, @products) { |product|
      {
        id: product.id,
        title: product.title,
        price: product.price
      }
    }
  end
end

Parameters:

  • pagy (Pagy)

    The pagy object

  • records (Array)

    The paginated records

  • serializer (Proc, nil)

    Optional custom serializer for records

Yields:

  • (record)

    Block to serialize each record

Returns:

  • (Hash)

    JSON response with records and pagination data



61
62
63
64
65
66
67
68
69
70
71
72
73
74
# File 'lib/pagy_infinite_scroll/controller_helper.rb', line 61

def pagy_infinite_scroll_json(pagy, records, &serializer)
  {
    records: serialize_records(records, &serializer),
    pagy: {
      page: pagy.page,
      pages: pagy.pages,
      count: pagy.count,
      next: pagy.next,
      prev: pagy.prev,
      from: pagy.from,
      to: pagy.to
    }
  }
end