【发布时间】:2021-02-25 00:15:31
【问题描述】:
我有一个深度嵌套的对象,我想获得一个更新了其中一个嵌套属性的“dup”版本。
假设我们有一个Country、City、State、Person。
Country 有 city 和 state。 City 有 persons。
下面是Country 的示例,比如country_sample
{
"id"=>16,
"city"=>
[{"id"=>22,
"person"=>
[{"id"=>11,
"uuid"=>"20ac322f-5f62-4786-b14b-73e4cc2a9f38",
"updated_at"=>"2020-11-12T02:59:53.000Z"}]},
{"id"=>23,
"person"=>
[{"id"=>12,
"uuid"=>"196e8d33-9b2f-4aab-a2eb-1bda645abc31",
"updated_at"=>"2020-11-12T02:59:53.000Z"}]},
{"id"=>24,
"person"=>[]}],
"state"=>
[{"id"=>10,
"given_name"=>"SomeState",
"updated_at"=>"2020-11-12T02:59:53.000Z"}],
"other_prop"=>"val"
}
我需要(任何一个都可以):
- 我想用
id24向city添加一个新人,然后需要整个对象的dup版本 - 我想获得一个
dup版本并用id24向city添加一个新人
我面临的问题是:
当我运行dup_country = country_sample.dup 时,我没有得到嵌套属性。
我得到了类似的东西
{
"id"=>nil,
"city"=>[],
"state"=>[],
"other_prop"=>"val"
}
正如您所见,所有嵌套属性都不存在。我尝试了一堆其他处理 dup 的 gem,例如 (full_dup、deep_dup、deep_dive),但没有任何效果。我想知道可能出了什么问题?
更新:
虽然 deep_dup 适用于发布在 https://apidock.com/rails/Hash/deep_dup 的示例,但我尝试了我拥有的对象,它仍然具有与 dup 相同的效果。
【问题讨论】:
-
您要复制的对象是什么类型的?从您的示例来看,它看起来像一个哈希
-
我在主要对象以及它的 JSON 版本上进行了尝试。使用
.kind_of? (Hash)进行检查,它读取的 JSON 是hash。但是,JSON 版本上的deep_dup根本没有做任何事情。它返回相同的 JSON。 -
你能在主对象上做
.class吗? -
主要对象是
Country。另一方面,通过.as_json(:include .. nested properties的json版本是Hash
标签: ruby-on-rails ruby serialization