Как истечь кеш фрагмента для индекса объекта при обновлении объекта
Я фрагментирую этот фрагмент:
<% cache('fragment-id') do %>
<div id="fragment-id">
<%= render @object %>
</div>
<% end %>
Теперь, очевидно, мне нужно завершать этот кэш каждый раз, когда объект обновляется (если говорить с точки зрения БД).
Так что я должен поставить эту строку:
expire_fragment('fragment-id')
... здесь и там среди контроллеров, каждый раз, когда действие обновляет (или сохраняет) объект.
Но мне интересно, есть ли способ DRYer сделать это, например, написать какой-то хук в объектной модели (/app/models/object.rb), который запускает команду expire_fragment при каждом обновлении (или сохранении).
Является ли это возможным?
EDIT # 1:
Может быть, я могу просто переписать метод save в объектной модели следующим образом:
def save
expire_fragment('fragment-id')
super
end
Но для того, чтобы это работало правильно, я должен быть уверен, что метод "save" вызывается также всеми другими методами сохранения, такими как * update_attributes *, save! и т. д. Так ли это?
1 ответ
Вы можете наблюдать за своим объектом с помощью Sweeper, а внутри него добавить хук при обновлении. Читайте о подметальных машинах там.