我已经在这个问题上挣扎了一段时间,我终于要求在这里寻求帮助。
采用代表某个事件的非常简单的哈希:
{
:eventkey=>"someeventkey",
:web_id=>"77d5f434-5a40-4582-88e8-9667b7774c7d",
:apikey=>"eaf3b6e1-b020-41b6-b67f-98f1cc0a9590",
:details=> {
:phone=>"1-936-774-6886",
:email=>"dasia_schuster@wisokytrantow.com",
:pageUrl=>"http://ortiz.info/joe"
}
}
我的目标是创建一个'主记录'对于整个哈希,记录中的字段是所有不包含也是哈希值的键。当我遇到一个哈希值(在这种情况下'详细信息')时,我需要为该哈希中的每个k / v对创建一个单独的记录,该记录具有与父主记录相同的记录ID
我没有以某种方式得到正确的递归。理想情况下,我会找回一条主要记录:
{
:recordid=>"some-generated-record-id",
:web_id=>"77d5f434-5a40-4582-88e8-9667b7774c7d",
:apikey=>"eaf3b6e1-b020-41b6-b67f-98f1cc0a9590",
:details=>nil
}
嵌套哈希中每个键的不同条目:
{
:recordid=>"some-generated-detail-record-id",
:parentid=>"the-parent-id-from-the-master-record",
:phone=>"1-936-774-6886"
}
{
:recordid=>"another-generated-detail-record-id",
:parentid=>"the-same-parent-id-from-the-master-record",
:email=>"dasia_schuster@wisokytrantow.com"
}
等等。我试图将这组记录作为一系列哈希值回归。
我已经能够生成主记录以及详细记录,但详细记录包含详细信息中的所有密钥。
def eventToBreakout(eventhash,sequenceid = -1, parentrecordid = nil, records = [])
recordid = SecureRandom.uuid
sequenceid += 1
recordstruc = {:record_id => recordid, :parent_record_id => parentrecordid, :record_processed_ts => Time.now, :sequence_id => sequenceid}
eventhash.each_pair do |k,v|
if recurse?(v)
eventToBreakout(v,sequenceid,recordid,records)
else
if !recordstruc.keys.include?(k)
recordstruc[k]=v
end
end
end
records << recordstruc
records
end
我已经包含了我的代码,这是我目前从中获得的输出。
[{:record_id=>"ed98be89-4c1f-496e-beb4-ede5f38dd549",
:parent_record_id=>"fa77299b-95b0-429d-ad8a-f5d365f2f357",
:record_processed_ts=>2016-04-25 16:46:10 -0500,
:sequence_id=>1,
:phone=>"1-756-608-8114",
:email=>"hipolito_wilderman@morar.co",
:pageUrl=>"http://haag.net/alexie.marvin"},
{:record_id=>"fa77299b-95b0-429d-ad8a-f5d365f2f357",
:parent_record_id=>nil,
:record_processed_ts=>2016-04-25 16:46:10 -0500,
:sequence_id=>0,
:eventts=>2016-04-25 22:10:32 -0500,
:web_id=>"a61c57ae-3a01-4994-8803-8d8292df3338",
:apikey=>"9adbc7a4-03ff-4fcc-ac81-ae8d0ee01ef0"}]
答案 0 :(得分:0)
也许你想要这些东西?
input = { id: 'parent', value: 'parent value', child: { child_value: 1}}
record = {}
input.each do |k,v|
if v.is_a? Hash
v[:parent_id] = input[:id]
(record[:children] ||= []) << v
else
record[k] = v
end
end
puts record
# {:id=>"parent", :value=>"parent value", :children=>[{:child_value=>1, :parent_id=>"parent"}]}
顺便说一句,这是开始使用&#34; spec
&#34;的一个很好的例子。或&#34; test
&#34;像minitest
或rspec
这样的框架(两者都可以用于)。您已经定义了输入和预期输出,并且&#34;只是&#34;需要编码,直到所有测试/规范运行都是绿色。