сериализаторы активной модели - неопределенный метод «кэшируется»

Я пытаюсь использовать Active Model Serializers для кэширования 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


person Itai Sagi    schedule 23.03.2015    source источник
comment
Какую версию AMS вы используете? В последнее время в основной ветке произошли серьезные изменения, которые сильно на это повлияют.   -  person Josh Smith    schedule 28.03.2015


Ответы (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 = истина

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

person Soorya    schedule 09.04.2015
comment
это не помогает, так как мы хотим кэшировать отдельные модели и весь набор результатов - person Itai Sagi; 16.04.2015