tl; dr
- Si sabe que no necesitará el uso de datos
count
.
- Si sabe que usará o habrá usado el uso de datos
length
.
- Si no sabe lo que está haciendo, use
size
...
contar
Resuelve enviar una Select count(*)...
consulta a la base de datos. El camino a seguir si no necesita los datos, sino solo el recuento.
Ejemplo: recuento de mensajes nuevos, elementos totales cuando solo se va a mostrar una página, etc.
longitud
Carga los datos requeridos, es decir, la consulta según sea necesario, y luego solo los cuenta. El camino a seguir si está utilizando los datos.
Ejemplo: resumen de una tabla completamente cargada, títulos de datos mostrados, etc.
Talla
Comprueba si los datos se cargaron (es decir, que ya están en rieles), de ser así, simplemente cuéntelos, de lo contrario, llama a contar. (más las trampas, ya mencionadas en otras entradas).
def size
loaded? ? @records.length : count(:all)
end
¿Cuál es el problema?
Es posible que esté golpeando la base de datos dos veces si no lo hace en el orden correcto (por ejemplo, si representa el número de elementos en una tabla encima de la tabla representada, efectivamente se enviarán 2 llamadas a la base de datos).
size
de todos modos se adapta a la situación, ¿qué necesidad hay paralength
ycount
en absoluto?