在JSON
我的模型表示中Car
,我包含了一个昂贵方法的输出:
#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
a 的表示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。