Beware of calling #count on Active Record relations!

Given code like this:

```ruby
records = Record.includes(:related).all # Eager-loads to prevent N+1 queries...
records.each do |record|
  puts record.related.count # => ... but this produces N+1 queries anyway!
end
```

If you run this, you'll notice you get an `N+1 queries` problem, even though we're using `#includes`. This happens because of `record.related.count`. Remember, `records.related` here is not an `Array` but an instance of [`CollectionProxy`](https://edgeapi.rubyonrails.org/classes/ActiveRecord/Associations/CollectionProxy.html) and its `#count` method always reaches out to the database. Use `#length` or `#size` instead to solve this issue.

```ruby
records = Record.includes(:related).all
records.each do |record|
  puts record.related.length # Problem solved!
end
```

kevin-perez
February 18, 2021
