ruby-on-rails - rails will_paginate per page
Paginating una matriz en Ruby con will_paginate (4)
Tengo un array @ level1 que se ve así:
[[3.0, 4, 2], [2.0, 48, 3], [2.1, 56, 4], ............]
Quiero aplicar la paginación en esta matriz, por lo que cada página muestra solo algunas filas a la vez. Intenté esto:
@temp1 = @level1.paginate(:page => params[:page])
Pero arroja el siguiente error:
undefined method `paginate'' for [[3.0, 4, 2], [2.0, 48, 3], [2.1, 56, 4]]:Array
¿Cómo puedo realizar la paginación con will_paginate?
Claro, puedes usar WillPaginate::Collection
para construir paginación arbitraria entre colecciones. Suponiendo una matriz llamada values
:
@values = WillPaginate::Collection.create(current_page, per_page, values.length) do |pager|
pager.replace values
end
A continuación, puede tratar los @values
como cualquier otra colección de WillPaginate, incluido el paso a will_paginate
view helper.
Dado un collection
colección en un proyecto de Rails
will_paginate ~>3.0.5
collection.paginate(page: params[:page], per_page: 10)
devuelve la paginación para los valores de la matriz.
No olvides require ''will_paginate/array''
en la parte superior del controlador.
Este es mi ejemplo basado en la respuesta de @ chris-heald
products = %w(i love ruby on rails)
@products = WillPaginate::Collection.create(params[:page], params[:per_page], products.length) do |pager|
pager.replace products[pager.offset, pager.per_page]
end
Ver https://github.com/mislav/will_paginate/blob/master/lib/will_paginate/array.rb
Solo require ''will_paginate/array''
antes de probarlo y funcionará perfectamente. Si fuera yo, lo pondría en decir config/initalizers/will_paginate_extensions.rb
para que esté disponible de inmediato y desde cualquier lugar.