В JSON
представлении моей Car
модели, я включил вывод дорогого метода:Как я могу кэшировать JSON-представление объекта?
#car.rb
def as_json(options={})
super(options.merge(methods: [:some_expensive_method]))
end
У меня есть стандартный индекс действия:
#cars_controller.rb
respond_to :json
def index
respond_with(Car.all)
end
Я также использовать JSON
представления автомобилей в в других местах, например:
#user_feed.rb
def feed_contents
Horse.all + Car.all
end
#user_feeds_controller.rb
respond_to :json
def index
respond_with(UserFeed.feed_contents)
end
Потому что JSON
представление car
используется во многих местах, я хочу, чтобы он был кэширован сам по себе, используя car.cache_key
в качестве ключа кэширования с автоматическим истечением срока действия.
Это, как я сейчас делаю это:
#car.rb
def as_json(options={})
Rails.cache.fetch("#{cache_key}/as_json") do
super(options.merge(methods: [:some_expensive_method]))
end
end
Ввод кода кэша внутри as_json
не является правильным, хотя, потому что кэширование не является частью as_json
страх и риск «s. Каков правильный способ сделать это? Я использую Rails 3.2.15.