Я уверен, что "глобальная переменная" заставит волосы на затылке встать.Я пытаюсь сохранить иерархическое меню в таблице данных act_as_tree (готово).В application_helper.rb я создаю html-меню, опрашивая базу данных и обходя дерево (готово).Я не хочу делать это при каждой загрузке страницы.
Вот что я попробовал:
application.rb
config.menu = nil
application_helper.rb
def my_menu_builder
return MyApp::Application.config.menu if MyApp::Application.config.menu
# All the menu building code that should only run once
MyApp::Application.config.menu = menu_html
end
menu_controller.rb
def create
# whatever create code
expire_menu_cache
end
protected
def expire_menu_cache
MyApp::Application.config.menu = nil
end
Сейчас я стою на том, что при загрузке первой страницы база данных действительно запрашивается и меню создается.Результаты сохраняются в переменной config, и база данных никогда больше не удаляется для этого.
Это часть срока действия кэша, которая не работает.Когда я сбрасываю переменную config.menu в nil, предположительно в следующий раз через my_menu_builder, она обнаружит это изменение и перестроит меню, кэшируя новые результаты.Кажется, этого не происходит.
Вопросы:
Является ли Application.config хорошим местом для хранения подобных вещей?Кто-нибудь видит очевидный недостаток в этой стратегии кэширования?
Не говорите, преждевременная оптимизация - это этап, на котором я нахожусь. Итерация преждевременной оптимизации:)
Спасибо!