ruby Rails 6 Deep Dup

7hiiyaii  于 2023-06-22  发布在  Ruby
关注(0)|答案(1)|浏览(176)

我有一个深度嵌套的对象,我希望得到一个'dup'版本,其中一个嵌套属性被更新。
假设我们有一个CountryCityStatePerson
CountrycitystateCitypersons
下面是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"
}

我需要(任一作品):
1.我想用id24city添加一个新的人,然后需要整个对象的dup版本
1.我想获得dup版本,并使用id24将新用户添加到city
我面临的问题是:当我运行dup_country = country_sample.dup时,我没有得到嵌套的属性。
我得到的是

{
  "id"=>nil,
  "city"=>[],
  "state"=>[],
  "other_prop"=>"val"
}

正如您所看到的,所有嵌套的属性都不在那里。我尝试了一堆其他处理dup的gem,比如(full_dupdeep_dupdeep_dive),但都没有成功。我想知道哪里出了问题?
更新日期:
虽然deep_dup适用于https://apidock.com/rails/Hash/deep_dup上发布的示例,但我在我拥有的对象上进行了尝试,它仍然具有与dup相同的效果。

kyvafyod

kyvafyod1#

amoeba gem在对模型进行了一些更改后运行良好。

#config on models

# Country
class Country < ApplicationRecord
  ...
  
  amoeba do
    include-_association :city 
    include-_association :state 
  end
  ...
end

# City
class City < ApplicationRecord
  ...
  
  amoeba do
    include-_association :person 
  end
  ...
end

country_deep_dupped = country.amoeba_dup以获取deep-dup版本,该版本也返回嵌套对象的dup版本。

相关问题