te sugeriría altamente utilizando su base de datos para limitar los resultados. Esto es mucho más eficiente porque su base de datos está haciendo el trabajo (está diseñada para hacer esto) Y usted no está recuperando todos sus resultados y luego filtrándolos. Imagínese si tuviera 1 millón de resultados que le pidió a su base de datos para ... no muy deseable.
Lo que quiere hacer:
Shop.limit(20)
que tiene la base de datos haciendo el trabajo en lugar de Ruby.
Una prueba de referencia rápida (tabla sólo contiene 487 Comentarios resultados!): Peor
ruby-1.9.2-p136 :033 > Benchmark.ms do
ruby-1.9.2-p136 :034 > Comment.all.take(20)
ruby-1.9.2-p136 :035?> end
=> 649.461030960083
ruby-1.9.2-p136 :036 > Benchmark.ms do
ruby-1.9.2-p136 :037 > Comment.limit(20)
ruby-1.9.2-p136 :038?> end
=> 0.1506805419921875
~ 4300 veces!
O incluso si su argumento es que usted tiene una pequeña cantidad de resultados devueltos, aquí es otro punto de referencia:
ruby-1.9.2-p136 :041 > Benchmark.ms do
ruby-1.9.2-p136 :042 > Comment.limit(50).take(20)
ruby-1.9.2-p136 :043?> end
=> 410.9840393066406
ruby-1.9.2-p136 :044 > Benchmark.ms do
ruby-1.9.2-p136 :045 > Comment.limit(20)
ruby-1.9.2-p136 :046?> end
=> 0.05412101745605469
esa sustancia procedente de una base de datos? Entonces simplemente limítalo allí usando ActiveRecord. – halfdan
En realidad es un resultado de búsqueda de esfinge. Lo configuré como 50 por página, porque quiero mostrar 50 marcadores de Google Maps, pero en la lista, quiero mostrar solo 20. – Victor