@vadimstroganov

Правильно ли сделано кэширование?

Здравствуйте!
Есть партиал с меню.
Хочу этот фрагмент закешировать, вроде бы получилось, но при обновлении записи в меню, партиал остается тем же, кэш не сбрасывается, не пойму что не так.

_menu.slim
- menu = render_menu(code)

ul class="nav navbar-nav navbar-right"
  = cache ['menu', Menu.latest]
    - menu.each do |item|
      = cache item do
        li
          = (item.page.template.name == "index") ? link_to(item.page.title, "/") : link_to(item.page.title, item.page.slug)


В модели Menu.rb
def self.latest
  MenuTranslation.order(:updated_at).last
end


application_helper.rb:
def render_menu(code)
  menu = Menu.find_by :code => code
  menu.children
end


Полей created_at, updated_at в таблице menus нет, они есть в menu_translations (там хранятся переводы пункта меню)

И еще вопрос, сама ссылка на пункт меню хранится в таблице menus, то есть мне и туда нужно добавлять updated_at, и потом следить за updated_at в двух таблицах?
  • Вопрос задан
  • 179 просмотров
Пригласить эксперта
Ответы на вопрос 1
c3gdlk
@c3gdlk
Ментор в http://rubyboost.ru/
Функция cache может принимать или уже готовый ключ для хранения, или, как в Вашем случае, экземпляр модели. В этом случае ключ будет построен из id и updated_at, поэтому updated_at должен быть во всех моделях.

Еще в Вашем коде
- menu = render_menu(code)

вызывается до первого кеша, в этом случае в первом вызове кеша нет никакого смысла

Проще всего посмотреть логи консоли, в случае с кеширование рельса пишет какие фрагменты использует
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы