【发布时间】:2011-12-26 20:12:19
【问题描述】:
我有一个模型,在该模型中,我生成了一个比以前更复杂的字段。我已经序列化了哈希和数组,但是这个字段是 Gibberish::RSA.generate_keypair (https://github.com/mdp/gibberish) 的结果。据我了解,这或多或少是 ruby 包装器中的私钥/公钥对。
从命令行工作,我可以执行 update_attributes 并将生成的结果存储在文本字段中。在执行 rake db:seed 或创建实例时,这不起作用,我得到一个 yaml 字符串,指示几种类型的 Gibberish 对象。
除了散列和数组之外,我如何进行更复杂的 activerecord 序列化?或者我如何更深入地了解我正在尝试做的事情?
代码:
def generate_keypair
self.update_attributes(:rsakey => Gibberish::RSA.generate_keypair(1024) )
end
我调用相关的模型创建,基本调用 Gibberish 包装器
然后我得到的字段 myresource.rsakey 的输出
"--- !ruby/object:Gibberish::RSA::KeyPair\nkey:
!ruby/object:OpenSSL::PKey::RSA {}\ncipher:
!ruby/object:OpenSSL::Cipher::Cipher {}\n"
更新属性可以通过 rails 命令行进行,但不能在播种或创建时进行。到目前为止,我尝试添加序列化的其他方式完全破坏了进程或创建的实例。
编辑:直接通过在密钥对生成方法的结果上调用“to_s”来解决,这只是将其保存为“暂时可用”的文本字段,直到它需要更优雅。
【问题讨论】:
-
你为什么在这里使用
serialize?当您可能只需要钥匙时,为什么还要打扰所有unstable YAML 的废话? -
我不知道,只是从用 activerecord 做事——yaml 是基本的序列化程序。我真的希望超越这一点,这个问题的基础是关于我为什么要这样做,如果有另一种方法可以追求的话。此外,密钥是适合 yaml rails 配置的较大包的一部分,它可以保持一切整洁,我不需要处理密钥文件夹
标签: ruby-on-rails ruby serialization activerecord