1

我正在使用 Redis::Objects

https://github.com/nateware/redis-objects

我想在将对象转换为 JSON 之前修改演示者中​​的类,所以我想做的是合并一个键,但不必在演示者中管理 redis 对象类的访问器。

class MyOb
  include Redis::Objects

  value :foo
  value :bar
end

myob = new MyOb
myob.foo = "foo"
# I can do
myob.to_json #=> valid string with foo and bar keys
# what i want
myob.to_h #=> {foo: "foo", bar: nil}
# so i can
myob.to_h.merge(baz: "baz"}.to_json

我还没有找到任何可以给我类似表示的东西,所以如果你知道神奇的 api 酱,我很想听听。谢谢!

4

2 回答 2

1

你可以像这样低效地破解它:

class MyOb
  def to_h
    JSON.parse(self.to_json)
  end
end

[编辑]或者你可以这样做,这样你就不必在多个地方跟踪密钥:

class MyOb
  def to_h
    Hash[MyOb.redis_objects.map { |k,_| [k, self.send(k)] }]
  end
end
于 2013-05-15T21:34:28.300 回答
0
require 'json'

class MyOb
  include Redis::Objects

  value :foo
  value :bar

  def to_h
   JSON.parse(self.to_json)
  end
end
于 2013-05-15T21:35:56.300 回答