【发布时间】:2014-06-11 09:47:31
【问题描述】:
我正在尝试使用 Active Model Serializer 实现一些缓存;这是我的序列化器。
class ServiceFieldSerializer < ActiveModel::Serializer
attributes :id, :name, :description, :meta_description, :content, :practitioner_term, :avatar, :slug
has_many :services
embed :id, include: true
cached
delegate :cache_key, to: :object
def services
object.services.published
end
def avatar
object.image_url :avatar if object.image.present?
end
end
服务序列化器
class ServiceSerializer < ActiveModel::Serializer
attributes :id, :name, :description, :meta_description, :content, :practitioner_term, :avatar, :slug
has_one :service_field
embed :id
cached
delegate :cache_key, to: :object
def avatar
object.image_url :avatar if object.image.present?
end
end
输出“y ServiceSerializer.new(Service.first)”
object: !ruby/ActiveRecord:Service
attributes:
id: 4
name: ADHD Coaching
description: Bliv klogere på hvorfor du har det damp i hovede
service_field_id: 2
created_at: 2014-02-18 08:08:41.755177000 Z
updated_at: 2014-04-29 08:30:44.111671000 Z
content: tihihi
image:
published: true
meta_description:
slug: adhd-coaching
practitioner_term:
我的问题是,当我有缓存调用时,我的 json 响应看起来像这样。
service_fields: []->
0: {id:2, name:Coaching, description:Det bliver du glad for, meta_description:, content:,…}
1: {id:1, name:Massage, description:Massage er godt for krop og alt i hele verden., meta_description:null,…}
2: {id:3, name:Terapi, description:Noget med nogle møder, meta_description:null,…}
如您所见,缺少关联的服务,如果我从序列化程序中删除缓存,则服务就在那里。
我做错了什么?
Rails 版本:4.0.5
AMS 版本:0.8.1
【问题讨论】:
-
您是否尝试清除缓存并确保您不会以某种方式获取旧的缓存值?
-
我多次重新启动 memcached,是的,我一直盯着日志,是的 :)。
-
不要唠叨,但有没有机会在测试时甚至不使用 memcached?也许您正在以某种方式使用默认文件存储?
-
缓存设置为delli 'config.cache_store = :dalli_store',带有perform_caching。正如我所写,我可以在日志中看到缓存也在被写入,并且在重新启动 memcached 时它会重置。 :-)
-
@MartinElvar 序列化程序 ServiceSerializer 存在吗?
标签: ruby-on-rails ruby-on-rails-4 active-model-serializers