Кеширование множества простых запросов в рельсах - PullRequest
1 голос
/ 04 октября 2011

В моем приложении есть объекты, и они принадлежат странам, регионам, городам, типам, группам, компаниям и другим наборам.Каждый набор довольно прост - у него есть идентификатор, имя и иногда некоторые указатели на другие наборы, и он никогда не меняется.Некоторые наборы небольшие, и я загружаю их в before_filter следующим образом:

@countries = Country.all
@regions = Region.all

Но затем я вызываю, например, offer.country.name или region.country.name, и мое приложение выполняет отдельный запрос БД:by-id, хотя я уже все их загрузил.После этого я выполняю запрос через: include, и идентификаторы этого случая, генерируемые энергичной загрузкой, не зависят от того, загружен ли я этими данными с другим запросом по идентификатору или нет.

Итак, я хочукакой-то кеш.Например, я могу сгенерировать хэши с ключами в качестве идентификаторов записей в моем before_filter, а затем вызвать @countries [offer.country_id] .name.В этом случае мне кажется, что мне не нужна загрузка, и здесь легко включить Rails.cache.Но, может быть, есть какое-нибудь умное встроенное решение для рельсов, которое не требует переписывания всего?

1 Ответ

1 голос
/ 04 октября 2011

Кэширование списков таких моделей не будет кэшировать отдельные экземпляры, существующие в ассоциациях других моделей.

Команда Rails работала над реализацией Identity Maps в Rails 3.1 решить эту точную проблему, но пока она по умолчанию отключена.Вы можете включить его и посмотреть, работает ли он для вашей проблемы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...