РАЗРАБОТКА

Как загружать связанные данные пользователей в Rails — практическое руководство

Научитесь загружать связанные данные пользователей в Rails и улучшите производительность своих приложений.

✍️ Редакция iTech News | 06.04.2026 | ⏱ 2 мин | 👁 1 | Источник: DEV Community
Эффективное использование eager loading в Rails

В разработке приложений на Ruby on Rails частой задачей — скорость загрузки данных. Эта статья предлагает решения для использования eager loading, позволяя загружать эти о постах и лайках пользователей одновременно. Такой подход существенно повышает производительность приложений и уменьшает количество запросов к базе данных.

Почему это важно

Некоторые разработчики сталкиваются с проблемами, когда хотят узнать, как загрузить ассоциации, связанные с пользователем. Например, как проверить, лайкнул ли пользователь пост или — ли он другом другого пользователя. Как правило, обычные запросы могут перерастать в накладные расходы при увеличении объема данных, что делает необходимость в правильном использовании eager loading актуальной для большинства проектов.

Как реализовать eager loading в Rails

Эта статья предлагает несколько конкретных шагов. Прежде всего, необходимо создать класс Current, который будет хранить user_id:

class Current < ActiveSupport::CurrentAttributes
 attribute :user_id
end

Затем, перед каждым запросом, идентификатор текущего пользователя должен быть установлен в ApplicationController:

class ApplicationController < ActionController::Base
 before_action :set_user_id, if: :user_signed_in?

 protected

 def set_user_id
 Current.user_id = current_user.id
 end
end

После этого можно установить ассоциацию между моделью Post и Like, что позволит загружать эти о лайках:

class Like < ApplicationRecord
 belongs_to :post
 belongs_to :user
end

Далее добавьте ассоциацию has_many в модель Post, которая будет затрагивать текущего пользователя:

class Post < ApplicationRecord
 belongs_to :user
 has_many :likes, dependent: :destroy
 has_many :liked, -> { where(id: Current.user_id) }, through: :likes, source: :user
end

Применение в контроллерах и представлениях

Теперь можно использовать eager loading в контроллерах. Например, в PostsController вы можете загрузить посты и их лайки следующим образом:

class PostsController < ApplicationController
 before_action :authenticate_user!

 def index
 @posts = Post.eager_load(:liked).all
 end
end

В представлениях можно легко проверить статус лайков для каждого поста.

Вывод для разработчиков

Использование eager loading позволяет значительно улучшить производительность ваших Rails приложений. Это не только снижает число запросов к базе данных, но и упрощает логику кода, что особенно важно для команд, работающих с масштабируемыми проектами. Правильная реализация этого метода поможет избежать множества проблем, связанных с медленными запросами.

В скором будущем биланди подход к разделению и оптимизации нагрузки на БД только укрепится, и разработчикам стоит внимательнее изучать возможности, которые предоставляет Rails.

Поделиться: Telegram X LinkedIn