Spec-Zone.ru › Ruby on Rails 8.1

модуль AbstractController::Caching::Fragments

Абстрактный контроллер Caching Fragments

Кэширование фрагментов используется для кэширования различных блоков в представлениях без кэширования всего действия целиком. Это полезно, когда определённые элементы действия часто меняются или зависят от сложного состояния, а другие части меняются редко или могут совместно использоваться несколькими сторонами. Кэширование выполняется с помощью помощника cache, доступного в Action View. Подробнее см. в разделе ActionView::Helpers::CacheHelper.

Хотя настоятельно рекомендуется использовать истечение срока действия кэша на основе ключей (подробнее см. ссылки в CacheHelper), кэш также можно удалять вручную. Например:

expire_fragment('name_of_cache')

Открытые методы экземпляра

combined_fragment_cache_key (key) Показать исходный код
# File actionpack/lib/abstract_controller/caching/fragments.rb, line 68
def combined_fragment_cache_key(key)
  head = self.class.fragment_cache_keys.map { |k| instance_exec(&k) }
  tail = key.is_a?(Hash) ? url_for(key).split("://").last : key

  cache_key = [:views, ENV["RAILS_CACHE_ID"] || ENV["RAILS_APP_VERSION"], head, tail]
  cache_key.flatten!(1)
  cache_key.compact!
  cache_key
end

Принимает ключ (описанный в разделе expire_fragment) и возвращает массив ключей, подходящий для чтения, записи или удаления кэшированного фрагмента. Все ключи начинаются с :views, за которым следует ENV["RAILS_CACHE_ID"] или ENV["RAILS_APP_VERSION"], если он задан, затем любые значения префикса ключа, заданные для всего контроллера, и в конце — указанное значение key.

expire_fragment (key, options = nil) Показать исходный код
# File actionpack/lib/abstract_controller/caching/fragments.rb, line 131
def expire_fragment(key, options = nil)
  return unless cache_configured?
  key = combined_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

Удаляет фрагменты из кэша.

key может иметь одну из трёх форм:

  • String — обычно это путь, например pages/45/notes.

  • Hash — обрабатывается как неявный вызов url_for, например { controller: 'pages', action: 'notes', id: 45}

  • Regexp — удаляет все совпадающие фрагменты, поэтому %r{pages/\d*/notes} может удалить все заметки. Не используйте в регулярном выражении якоря (^ или $), так как фактическое совпавшее имя файла выглядит как ./cache/filename/path.cache. Примечание: истечение срока действия по Regexp поддерживается только в хранилищах кэша, которые могут перебирать все ключи (в отличие от memcached).

options передаётся методу delete хранилища кэша (или delete_matched для ключей Regexp).

fragment_exist? (key, options = nil) Показать исходный код
# File actionpack/lib/abstract_controller/caching/fragments.rb, line 105
def fragment_exist?(key, options = nil)
  return unless cache_configured?
  key = combined_fragment_cache_key(key)

  instrument_fragment_cache :exist_fragment?, key do
    cache_store.exist?(key, options)
  end
end

Проверяет, существует ли кэшированный фрагмент в месте, указанном параметром key (допустимые форматы см. в разделе expire_fragment).

read_fragment (key, options = nil) Показать исходный код
# File actionpack/lib/abstract_controller/caching/fragments.rb, line 93
def read_fragment(key, options = nil)
  return unless cache_configured?

  key = combined_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

Читает кэшированный фрагмент из места, указанного параметром key (допустимые форматы см. в разделе expire_fragment).

write_fragment (key, content, options = nil) Показать исходный код
# File actionpack/lib/abstract_controller/caching/fragments.rb, line 80
def write_fragment(key, content, options = nil)
  return content unless cache_configured?

  key = combined_fragment_cache_key(key)
  instrument_fragment_cache :write_fragment, key do
    content = content.to_str
    cache_store.write(key, content, options)
  end
  content
end

Записывает content в место, указанное параметром key (допустимые форматы см. в разделе expire_fragment).

© 2004–2021 David Heinemeier Hansson
Licensed under the MIT License.

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API