В Rails оба find_each и where используются для извлечения данных из базы данных по ActiveRecord.
Вы можете передать условие запроса на where
, например:
c = Category.where(:name => 'Ruby', :position => 1)
И вы можете передать размер партии до find_each
, например:
Hedgehog.find_each(batch_size: 50).map{ |p| p.to_json }
Но какая разница между следующим кодом 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
Выполняет ли пакет 1 1 каждый раз 50 кортежей, а код 2 извлекает все кортежи за один раз? Более подробное объяснение приветствуется.
Мое мнение таково:
- оба типа
where
иfind_each
могут использоваться для пакетного извлечения, но пользователь может определять размер партии при использованииfind_each
. -
find_each
не поддерживает условие прохождения запроса.
Пожалуйста, поправьте меня, если мое понимание неверно.