ruby-on-rails – 如何使用Active Model Serializers(0.8)缓存数
发布时间:2020-12-17 01:56:31 所属栏目:百科 来源:网络整理
导读:在单个Active Model Serializer上,您可以在序列化程序中指定缓存键,即 使用AMS缓存单个对象 class OrgSerializer ActiveModel::Serializer cached delegate :cache_key,to: :objectend 数组缓存 我需要提供这些对象的数组: array_json = ActiveModel::Array
在单个Active Model Serializer上,您可以在序列化程序中指定缓存键,即
使用AMS缓存单个对象 class OrgSerializer < ActiveModel::Serializer cached delegate :cache_key,to: :object end 数组缓存 我需要提供这些对象的数组: array_json = ActiveModel::ArraySerializer.new(Org.all.limit(50)).to_json 我没有做50个缓存命中来构建数组,而是想要执行单个缓存命中,并在任何数组元素到期时使其到期. 如何缓存数组(并构造密钥)? 因此,我想要一个由单个对象ID组成的数组的缓存键,以及它们在日期的最后更新,如下所示: def cache_key_for_collection collection keys = collection.collect{|element| "#{element.id}#{element.updated_at}" } keys.join "" end 你怎么能用AMS(0.8)做到这一点? AMS阵列序列化器是否允许这样做,还是需要手动完成?有没有办法声明你想要缓存以及如何构造密钥? 如果它没有这样做,那么手动构建缓存/密钥的最佳方法是什么? 解决方法
它的工作方式与标准的Serializer非常相似.您将创建一个如下所示的自定义ArraySerializer:
class BaseArraySerializer < ActiveModel::ArraySerializer cached def cache_key keys = object.map{|obj| "#{obj.id}-#{obj.updated_at.to_s(:number)}" } keys.join "/" end 结束 需要注意的一点是,您仍在使用object.map而不是对象,但这纯粹是如何实现AMS 0.8.0. 然后,为了传递json,你必须做的唯一改变是:array_json = ActiveModel :: ArraySerializer.new(Org.all.limit(50)).to_json (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |