无法使用Marshal.dump Google Protobuf重复字段

时间:2017-05-08 17:39:05

标签: ruby-on-rails ruby protocol-buffers marshalling

我正在尝试以下方法:

Rails.cache.fetch(key, expires_in: 1.day) do
    Some Protobuf Model
end

我得到了:

  

TypeError:没有为班级定义_dump_data   谷歌::的Protobuf :: RepeatedField

因为模型中有重复的字符串 怎么解决这个问题?

1 个答案:

答案 0 :(得分:0)

Himberjack 已经解决了他的问题,但我会在这里添加我自己的(不同的)解决方案,以防对其他人有帮助。

当我缓存 protobuf 消息时,我使用 encode 将其转换为缓存字符串,并使用 decode 将其转换回 protobuf 消息。这些方法是从protobuf消息的类中调用的

def proto_cache_fetch(proto_class, key, options)
  data = Rails.cache.fetch(key, options) do
    proto_class.encode(yield)
  end
  proto_class.decode(data)
end

那么你可以这样做:

proto_cache_fetch(MyMessage, key, expires_in: 1.day) do
  MyMessage.new(attr: 'value')
end