модель

# app/models/user.rb
class User < ApplicationRecord
  has_many :posts
end

# app/models/post.rb
class Post < ApplicationRecord
  belongs_to :user
end

Пример без использования includes

# Создаем пользователей и посты
users = (1..10).map { |i| User.create(name: "User #{i}") }
users.each do |user|
  (1..5).each { |i| Post.create(title: "Post #{i}", user: user) }
end

# Проверяем первый пост у каждого пользователя без использования includes
users.each do |user|
  puts user.posts.first
end

Пример с использованием includes

# Создаем пользователей и посты
users = (1..10).map { |i| User.create(name: "User #{i}") }
users.each do |user|
  (1..5).each { |i| Post.create(title: "Post #{i}", user: user) }
end

# Проверяем первый пост у каждого пользователя с использованием includes
users_with_posts = User.includes(:posts).all
users_with_posts.each do |user|
  puts user.posts.first
end

Результаты
Без использования includes: В этом случае для каждого пользователя будет выполнен отдельный запрос к базе данных для получения его постов. Если у вас 10 пользователей, то будет выполнено 11 запросов (1 запрос для получения пользователей и 10 запросов для получения постов).

С использованием includes: В этом случае будет выполнен только один запрос для получения всех пользователей и их постов. Общее количество запросов будет равно 2 (1 запрос для пользователей и 1 запрос для постов).

Вывод

Использование includes значительно сокращает количество запросов к базе данных, что улучшает производительность приложения.