Обновление:
Простым решением было бы удалить все кэшированные html навигации для всех затронутых пользователей изменений.Вы также можете загрузить navHTML с помощью вызова ajax, чтобы вам не приходилось ждать загрузки для загрузки страницы (и хранить кэшированную версию navHTML в localStorage на клиенте и всякий раз, когда страница загружается, вы можетезатем инициируйте сброс navHTML, если необходимо).
Более сложное решение будет:
Кэшируйте это в 2 слоя (navHTML, а затем отдельные элементы / пользователи / элементы состояния).Вам нужно будет найти способ обновления области действия, чтобы они знали, для какого количества они должны инициировать сброс.Поэтому, если вы изменяете статус доставки на конечном автомате, вы должны сбросить все счетчики для этой доставки и удалить навигационный кеш для затронутых пользователей.
Я бы поместил все ключи для каждого элемента доставки в кэш в некотором пространстве имен, например, "delivery: 234324-user: 123-status", поэтому всякий раз, когда изменяется Delivery с id # 234324, вы выполняете итерацию иудалите все элементы кэша, которые принадлежат этой доставке (вероятно, лучше всего сохранять ее как можно более тупой).Вы можете вычислить и сохранить количество кешей, когда кто-то запрашивает страницу, и просто удаляет кеш при изменении реального объекта.Затем вы можете полностью кэшировать навигационный html, но всякий раз, когда что-то меняется с вашим пользователем и идентификатором (например, user-123), вы удаляете навигационный кеш, а также принудительно перезагружаете navHTML.Добавьте к этому некоторое время кеша для навигации (например, максимальный возраст 1 мин или что-то в этом роде), чтобы учесть ошибки.Элемент навигации должен создавать через кеш отдельных элементов, чтобы он не проходил через каждый элемент.
Возможно, вы захотите добавить Cache Sweeper, связанный с вашими связанными моделями http://guides.rubyonrails.org/caching_with_rails.html
Вот эталонный кеш для справки (я думаю, что построение модели базы данных для использования кеш-счетчика - лучший способ справиться с этим).
http://railscasts.com/episodes/23-counter-cache-column
Этоможно использовать его автоматически с отношением has_many или обновлять счетчики вручную.Я предполагаю, что если ваша модель сложна и у вас есть отношение «многие ко многим», вы можете поместить счетчики в реляционный объект.