модуль ActionController::Caching::Fragments
Кэширование фрагментов используется для кэширования различных блоков в представлениях без кэширования всего действия целиком. Это полезно, когда отдельные элементы действия часто изменяются или зависят от сложного состояния, а другие части редко изменяются или могут быть совместно использованы несколькими сторонами. Кэширование выполняется с использованием помощника cache , доступного в Action View. Подробнее см. ActionView::Helpers::CacheHelper.
Хотя настоятельно рекомендуется использовать кэширование с истечением срока действия на основе ключей (см. ссылки в CacheHelper для получения дополнительной информации), также возможно вручную истекать кэши. Например:
expire_fragment('name_of_cache')
Открытые методы экземпляра
Удаляет фрагменты из кэша.
Параметр `key` может принимать одну из трёх форм:
-
Строка - Обычно это путь, например
pages/45/notes. -
Хэш - Обрабатывается как неявный вызов
url_for, например{ controller: 'pages', action: 'notes', id: 45} -
Регулярное выражение - Удалит любой фрагмент, который соответствует образцу, например,
%r{pages/\d*/notes}может удалить все заметки. Убедитесь, что вы не используете якоря в регулярном выражении (^или$) , так как фактическое имя файла, которому соответствует регулярное выражение, выглядит как./cache/filename/path.cache. Примечание: кэширование с истечением срока действия по регулярным выражениям поддерживается только в кэшах, которые могут итерировать по всем ключам (в отличие от memcached).
Параметр `options` передаётся в метод delete хранилища кэша (или delete_matched, для ключей-регулярных выражений).
# File actionpack/lib/action_controller/caching/fragments.rb, line 79
def expire_fragment(key, options = nil)
return unless cache_configured?
key = fragment_cache_key(key) unless key.is_a?(Regexp)
instrument_fragment_cache :expire_fragment, key do
if key.is_a?(Regexp)
cache_store.delete_matched(key, options)
else
cache_store.delete(key, options)
end
end
end Принимая ключ (как описано в expire_fragment), возвращает ключ, подходящий для чтения, записи или истечения срока действия кэшированного фрагмента. Все ключи имеют префикс views/ и используют ActiveSupport::Cache.expand_cache_key для расширения.
# File actionpack/lib/action_controller/caching/fragments.rb, line 21
def fragment_cache_key(key)
ActiveSupport::Cache.expand_cache_key(key.is_a?(Hash) ? url_for(key).split("://").last : key, :views)
end Проверяет, существует ли кэшированный фрагмент из местоположения, обозначенного key (см. expire_fragment для допустимых форматов).
# File actionpack/lib/action_controller/caching/fragments.rb, line 52
def fragment_exist?(key, options = nil)
return unless cache_configured?
key = fragment_cache_key(key)
instrument_fragment_cache :exist_fragment?, key do
cache_store.exist?(key, options)
end
end Читает кэшированный фрагмент из местоположения, обозначенного key (см. expire_fragment для допустимых форматов).
# File actionpack/lib/action_controller/caching/fragments.rb, line 40
def read_fragment(key, options = nil)
return unless cache_configured?
key = fragment_cache_key(key)
instrument_fragment_cache :read_fragment, key do
result = cache_store.read(key, options)
result.respond_to?(:html_safe) ? result.html_safe : result
end
end Записывает content в местоположение, обозначенное key (см. expire_fragment для допустимых форматов).
# File actionpack/lib/action_controller/caching/fragments.rb, line 27
def write_fragment(key, content, options = nil)
return content unless cache_configured?
key = fragment_cache_key(key)
instrument_fragment_cache :write_fragment, key do
content = content.to_str
cache_store.write(key, content, options)
end
content
end
© 2004–2016 David Heinemeier Hansson
Licensed under the MIT License.