Вопрос

Это меня поставило в тупик.

У меня есть представление с кэшированным фрагментом:

 - cache :key=>"news" do    
   %h2 News
   - etc

У меня есть подметальная машина, которая использует:

def expire_home_cache
  puts "expire_home_cache"
  expire_fragment(:key => "news") 
end

Очиститель вызывается, поскольку я вижу «expire_home_cache» в выводе консоли.

Но фрагмент не обновляется...

Есть идеи?

Это было полезно?

Решение

Вы можете попробовать это:

   cache("news") do    
     %h2 News
     - etc
   end

и...

def expire_home_cache
  puts "expire_home_cache"
  expire_fragment("news") 
end

...или попробуйте это...

 - cache({:key=>"news"}) do    
   %h2 News
   - etc

Я думаю, что проблема может заключаться в том, что Ruby или Rails с трудом определяют, что именно представляет собой ключ, и поэтому метод кэша и expire_fragment генерируют два разных ключа кэша.

Другие советы

Попробуйте заменить expire_fragment(:key => "news") с ActionController::Base.new.expire_fragment(:key => "news")

Нет времени объяснять, но у меня это сработало.

Правильный способ сделать это:

cache :news do

  ...
end

И затем в вашей подметальной машине:

expire_fragment :news

Это не дает прямого ответа на ваш вопрос, но пробовали ли вы плагин timed_fragment_cache в качестве альтернативы?

http://github.com/tricycle/timed_fragment_cache/tree/master

Я обнаружил, что это гораздо более простой способ истечения срока действия фрагментов в моих проектах.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top