【发布时间】:2023-04-03 18:53:01
【问题描述】:
我已经为这个问题苦苦挣扎了一段时间,我终于要在这里寻求帮助了。
取一个非常直接的哈希来表示某个事件:
{
: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"}]
【问题讨论】:
-
欢迎来到 SO。请阅读“minimal reproducible example”。您的问题很好,但您的代码不可运行,因此不会显示问题。我建议在代码中添加一个示例方法调用来演示问题。这样一来,每个试图帮助您的人都将在同一个页面上工作。