Сериализаторы активной модели - неопределенный метод 'cached'

Я пытаюсь использовать сериализаторы Active Model для кэширования JSON, используя множество руководств, которые я там видел, все они рекомендуют использовать встроенный механизм кэширования следующим образом:

class CacheSerializer < ActiveModel::Serializer
  cached
  delegate :cache_key, :to => :object
end

и это мой базовый сериализатор, от которого должны наследоваться все другие кэшируемые сериализаторы, однако я всегда получаю следующее:

undefined local variable or method `cached' for CacheSerializer:Class

просматривая документацию, я также попытался использовать ключ кеша: "бла-бла", который выдал ту же неопределенную ошибку метода.

У меня включено кэширование и настроено хранилище кеша, кэширование работает во всех других частях приложения.

есть идеи?

источник: https://robots.thoughtbot.com/fast-json-apis-in-rails-with-key-based-caches-and

1 ответ

Решение

Кэширование версии сериализатора активной модели>= 0.9.0

Поскольку кэширование еще не реализовано в более новых версиях AMS >= (0.9.0) из-за перезаписи, вы можете использовать встроенные в Rails функции кэширования.

def index
  trips = Trip.all
  json = cache ['v1', trips] do
   render_to_string json: trips
  end
  render json: json
end

Он не будет работать в разработке по умолчанию, потому что кэширование отключено для режима разработки.

Вы можете скопировать строку конфигурации из вашего production.rb в development.rb просто для проверки работоспособности:

config.action_controller.perform_caching = true

По этому поводу на Github также есть вопрос.

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