tutorial rails que heinemeier hansson ejemplos descargar david curso ruby-on-rails ruby ruby-on-rails-3 ruby-on-rails-4 activerecord

ruby on rails - que - En Rails, ¿cuál es la diferencia entre find_each y where?



ruby on rails tutorial (1)

Una relación de registro activa no carga automáticamente todos los registros en la memoria.

Cuando llame a #each , todos los registros se cargarán en la memoria. Cuando llame a #find_each , los registros se cargarán en la memoria en lotes del tamaño de lote dado.

Entonces, cuando su consulta devuelve una cantidad de registros que serían demasiada memoria para los recursos disponibles del servidor, entonces usar #find_each sería una gran opción.

Básicamente es como usar la enumeración perezosa de ruby #to_enum#lazy con #each_slice y luego #each (muy conveniente).

En Rails, find_each y where se utilizan para recuperar datos de la base de datos compatible con ActiveRecord.

Puede pasar su condición de consulta a where , como:

c = Category.where(:name => ''Ruby'', :position => 1)

Y puede pasar el tamaño del lote a find_each , como:

Hedgehog.find_each(batch_size: 50).map{ |p| p.to_json }

Pero, ¿cuál es la diferencia entre el siguiente código 2?

# code 1 Person.where("age > 21").find_each(batch_size: 50) do |person| # processing end # code 2 Person.where("age > 21").each do |person| # processing end

¿El lote de código 1 recupera 50 tuplas cada vez y el código 2 recupera todas las tuplas de una vez? Más detalles de explicación es bienvenida.

Mi opinión es:

  1. where y find_each se pueden usar para la recuperación de lotes, pero el usuario puede definir el tamaño del lote al usar find_each .
  2. find_each no admite pasar la condición de consulta.

Por favor corríjame si mi comprensión es incorrecta.