gpt4 book ai didi

ruby - 在 DataMapper 中序列化和反序列化 Ruby 对象

转载 作者:太空宇宙 更新时间:2023-11-03 18:22:58 25 4
gpt4 key购买 nike

我刚开始使用 DataMapper,发现自己经常做这类事情:

class MyModel
include DataMapper::Resource

property :id, Serial
property :serialized_credentials, String

def credentials
@credentials ||= YAML.load(self.serialized_credentials)
end

def credentials=(c)
@credentials = nil
self.serialized_credentials = YAML.dump(c)
end

end

这允许我为凭据传递哈希(例如)。

但是 DataMapper 是否已经为此提供了一种机制?

最佳答案

您可以使用 DataMapper 提供的 Object 类型:

class MyModel
include DataMapper::Resource

property :id, Serial
property :credentials, Object
end

然而,这将使用 Marshal.dump 而不是 YAML.dump,但您可以通过定义自己的类型来干掉它:

class YAMLObject < DataMapper::Type
primitive String

def self.dump(value, property)
Base64.encode64(YAML.dump(value))
end

def self.load(value, property)
value.nil? ? nil : YAML.load(Base64.decode64(value))
end
end

然后你就可以像使用任何其他类型一样使用它了:

class MyModel
include DataMapper::Resource

property :id, Serial
property :credentials, YAMLObject
end

最后但同样重要的是 dm-types gem 提供了 Json 类型,它使用 MultiJson 转储和加载数据。

引用(对象类型):

引用(定义自己的类型):

引用资料(Json 类型):

关于ruby - 在 DataMapper 中序列化和反序列化 Ruby 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14964443/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com