私はこの問題をしばらく苦労しています。私はついにここで助けを求めるつもりです。Rubyのデータレコードに再帰的ハッシュを解析する
いくつかのイベントを表し、非常に簡単ハッシュください:私の目標は、レコードのフィールドが含まれていないすべてのキーであることで、全体のハッシュのための「マスターレコード」を作成することです
{
:eventkey=>"someeventkey",
:web_id=>"77d5f434-5a40-4582-88e8-9667b7774c7d",
:apikey=>"eaf3b6e1-b020-41b6-b67f-98f1cc0a9590",
:details=> {
:phone=>"1-936-774-6886",
:email=>"[email protected]",
:pageUrl=>"http://ortiz.info/joe"
}
}
を値もハッシュです。ハッシュ(この場合は「詳細」)の値を入力すると、親マスターレコードと同じレコードIDを持つそのハッシュの各k/vペアごとに個別のレコードを作成する必要があります。
何とか再帰を取得できません。
{
: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=>"[email protected]"
}
そしてそうに理想的には私は、単一のプライマリレコードを取り戻すでしょう。私はこの一連のレコードをハッシュの配列として戻そうとしています。
マスターレコードと詳細レコードを生成できるようになっていますが、詳細レコードにはすべてのキーが詳細に含まれています。
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=>"[email protected]",
: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"}]
ようこそ。 「[mcve]」をお読みください。あなたの質問は良いですが、あなたのコードは実行可能ではないので、問題が示されません。問題を示すためにサンプルメソッド呼び出しをコードに追加することをお勧めします。そうすれば、皆さんを助けようとしている人はすべて同じページから作業するでしょう。 –