2013-04-29 15 views
5

Pracuję z pamięcią podręczną w moim projekcie Rails i chcę wygasić pamięć podręczną określonego adresu URL. Mam następującą komendę, aby wygaśnie fragment odpowiadający URL przeszły:Railsy tracą pamięć podręczną fragmentów z modeli

ActionController::Base.new.expire_fragment("localhost:3000/users/55-testing-devise/boards/") 

Jestem zdezorientowany, gdzie umieścić ten kod w moim projekcie Rails tak, że zostanie wykonany tak szybko, jak adres URL w polu tekstowym dodano i wygasa przycisk jest kliknięty.

Odpowiedz

3

ActionController::Caching::Sweeper to dobry sposób na zrobienie tego, jego część obserwatora Rails.

http://api.rubyonrails.org/classes/ActionController/Caching/Sweeping.html

class MyModelSweeper < ActionController::Caching::Sweeper 
    observe MyModel 

    def after_save(object) 
    expire_fragment('...') 
    end 
end 
+0

Nie chcę obserwatora w modelu. W moim projekcie już wprowadziłem zamiatarki. Ale to, kiedy chcesz wygaśnięcia pamięci podręcznej, jeśli adres URL nie wygasza kompletnego cahe. Czy pomocnicy są we właściwym miejscu? –

7

powinieneś rozważyć inne podejście. Modele nie powinny zajmować się sposobem działania pamięci podręcznej, a tradycyjnie cały proces zamiatania staje się zwykle złożony, nieporęczny i nie jest zsynchronizowany z resztą kodu.

Zasadniczo nigdy nie należy tracić ważności fragmentów ręcznie. Zamiast tego zmieniasz klucz/adres URL w pamięci podręcznej po zaktualizowaniu modelu (dzięki czemu masz nowy wpis w pamięci podręcznej dla nowej wersji).

Powszechną mądrością jest obecnie stosowanie podejścia Russian Doll Caching. Link prowadzi do artykułu wyjaśniającego podstawy i nadchodzącego Rails 4 will contain even better support.

Jest to prawdopodobnie najlepszy sposób, aby przejść do większości standardowych aplikacji Rails.

Powiązane problemy