How to query all records instead of .all() in Rails 4?

According to the Rails Guide on Active Record Query Interface, the correct way to iterate through all records is by using find_each.

Using Foo.all.each will load the entire table into memory, instantiating all the rows; then iterate through the instances. find_each does this in batches, which is more efficient in terms of memory usage.

From the guide:

The find_each method retrieves a batch of records and then yields each record to the block individually as a model. In the following example, find_each will retrieve 1000 records (the current default for both find_each and find_in_batches) and then yield each record individually to the block as a model. This process is repeated until all of the records have been processed:

User.find_each do |user|
  NewsLetter.weekly_deliver(user)
end

References:

  • Active Record Query Interface
  • ActiveRecord::Batches

Leave a Comment

Hata!: SQLSTATE[HY000] [1045] Access denied for user 'divattrend_liink'@'localhost' (using password: YES)