Как истечь кеш фрагмента для индекса объекта при обновлении объекта

Я фрагментирую этот фрагмент:

<% 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, а внутри него добавить хук при обновлении. Читайте о подметальных машинах там.

Другие вопросы по тегам