Buenas, en una vista necesito implementar una minipaginación a medida de
manera que se pueda avanzar a la vista del siguiente objeto o ir a la
anterior, algo parecido a un album de fotos, cuando estás en la vista de
una
foto puedes ir a la siguiente o a la anterior. Para hacer esto meto en
un
hash todos los elementos que tienen que aparecer en la paginacion, pero
no
encuentro la manera de poder acceder al siguiente o al anterior. tengo
esto:
Controlador de “projects”, metodo show
def show
@project = Project.find(params[:id])
@projects = @category.projects.find(:all,:order => ‘created_at
desc’)
respond_to do |format|
format.html
end
end
Paso el hash @projects para poder avanzar o retroceder, en la vista me
gustaria hace algo como
@projects[@project].next o @projects[@project].previous y asà poder
acceder
a los elementos contiguos.
Alguna sugerencia?
Gracias.
Hola,
gustaria hace algo como
En realidad @projects no es un hash, sino un Array. Si fuera un Hash no
tendrÃas forma de conseguir el anterior o el siguiente porque una hash
por definición no mantiene un orden determinado y al añadir/eliminar
elementos te cambiarÃa el orden de una vez para otra.
En el caso de un Array, puedes usar el método index para saber en qué
posición está un elemento determinado. Para ir hacia atrás, con restarle
menos uno siempre tendrás la posición del anterior (incluso aunque estés
al inicio, por aquello de que -1 equivale al último). En el caso de ir
al siguiente serÃa comprobar si estás al final de la lista y en ese caso
ir al 0, o si no sumar uno. Si no tienes elementos nulos, siempre
podrÃas implementar esto.
class Array
def previous(elem)
self[index(elem) -1] rescue nil
end
def next(elem)
self[index(elem) + 1] || self[0] rescue nil
end
end
Con eso tus arrays tendrÃan un método previous y next dado un elemento
determinado. Si no lo quieres genérico para cualquier Array, puedes usar
la misma idea ajustándola a tu caso.
Y por último, en tu código veo que haces un primer find para encontrar
un proyecto, y un segundo find para encontrar una lista de proyectos
entre los que está el tuyo. Ahà estás lanzando dos queries diferentes
cuando sólo con la segunda ya tienes todo lo que quieres. Si sobre el
resultado de la segunda query haces un
@[email protected]{|p| p.id == params[:id]}
obtienes el mismo resultado, pero ahorrándote una query… y poco a poco
rails va escalando
un saludo,
javier ramÃrez
Gracias Javier, he estado haciendo pruebas en la consola mientras
esperaba
una respuesta y me he dado cuenta de que no era un hash sinó un Array.
Importante lo de eliminar querys, es mi “obsesión”
Gracias.
El dÃa 19/03/08, javier ramirez [email protected] escribió: