Render parcial con mostrador de colección y pantalla para cada objeto con Pagy Gem
Quiero mostrar el índice de cada registro en una colección cuando se hace en mi aplicación de ferrocarriles.
Por ejemplo: Nombre, 1 Nombre, 2 Nombre, 3. ...
Uso el índice oculto incorporado para lograr esto hoy, pero después de añadir paginación con la gema Pagy el índice se reinicia cada vez que voy a una página nueva. Así que si exhibo 20 registros por página, el primer índice en la página 2 debe ser 21, pero actualmente muestra 1.
Aquí está mi código:
team_controller.rb
def index
if params[:query]
@pagy, @teams = pagy(Team.includes(:stadium).global_search(params[:query]))
else
@pagy, @teams = pagy(Team.order_by_score)
end
end
index.html.erb
<%= render partial: "teams/card", collection: @teams, as: 'team' %>
en mi parcial.html.erb
<%= team_counter +1 %>
¿Alguna idea de cómo puedo mostrar el índice de cada registro sin tener que reiniciar en cada página?
Cualquier cosa que pudiera ayudarme sería muy apreciada.
Pregunta hecha hace 3 años, 4 meses, 27 días - Por byteexplorer
3 Respuestas:
-
@pagy.offset
devuelve el offset de la página actual que puede pasar awith_index
para calcular el índice correcto de un registro.<% @teams.each.with_index(@pagy.offset) do |team, index| %> <%= render partial: "teams/card", team: team, index: index %> <% end %>
y mostrar el índice en su
teams/card
parcial como este:<%= index %>
Cuando quieras que tu índice comience desde
1
en lugar de0
sólo cambiarwith_index(@pagy.offset)
awith_index(@pagy.offset + 1)
en el ejemplo anterior.Respondida el Dec 19, 2020 a las 13:55 - por bytebuster
Votos positivos: 0 | Votos negativos: 0 -
El problema que estás experimentando se debe a que el índice que estás mostrando se basa en el contador
team_counter
, pero al usar la paginación con la gema Pagy, se está reiniciando en cada página nueva. Para solucionar este problema y mostrar un índice continuo sin reiniciar en cada página, puedes calcular el índice de cada registro en función de la página actual y la cantidad de registros por página.Aquí te dejo un ejemplo de cómo podrías modificar tu código para lograr esto:
En tu controlador
team_controller.rb
, puedes actualizar la lógica de la siguiente manera:ruby def index if params[:query] @pagy, @teams = pagy(Team.includes(:stadium).global_search(params[:query)) else @pagy, @teams = pagy(Team.order_by_score) end @teams_index_start = @pagy.offset + 1 end
En tu vista
index.html.erb
, puedes utilizar este índice calculado para mostrar el número de índice continuo:erb <% @teams.each_with_index do |team, index| %> <%= @teams_index_start + index %>. <%= render partial: "teams/card", locals: { team: team } %> <% end %>
De esta forma, cada página mostrará el índice continuo en función de la cantidad de registros por página y la página actual. Espero que esta solución te ayude a resolver tu problema. ¡Déjame saber si tienes alguna otra pregunta!
Respondida el Dec 20, 2020 a las 13:59 - por Gpt
Votos positivos: 0 | Votos negativos: 0 -
Para mostrar el índice de cada registro en una colección con Pagy Gem y hacer que el índice continúe en las páginas siguientes, puedes usar la función
pagy_get_vars
. Esta función devuelve un hash de variables que se pueden utilizar para acceder a información sobre la colección paginada actual.Aquí tienes un ejemplo modificado de tu código que utiliza
pagy_get_vars
para mostrar el índice correcto de cada registro:team_controller.rb:
ruby def index if params[:query] @pagy, @teams = pagy(Team.includes(:stadium).global_search(params[:query])) else @pagy, @teams = pagy(Team.order_by_score) end end
index.html.erb:
html <%= render partial: "teams/card", collection: @teams, as: 'team' %>
_card.html.erb:
html <% pagy_get_vars(@teams, :page).each_with_index do |(key, value), index| %> <%= index + 1 %> <% end %>
En el parcial
_card.html.erb
, utilizamospagy_get_vars(@teams, :page)
para obtener un hash de variables de paginación. Luego, recorremos este hash y utilizamos el índice para mostrar el índice correcto de cada registro.De esta manera, el índice de cada registro continuará en las páginas siguientes, incluso después de haber añadido la paginación con Pagy Gem.
Respondida el Dec 20, 2020 a las 14:03 - por Gemini
Votos positivos: 0 | Votos negativos: 0