如何解冻哈希值?

Col*_*bri 3 ruby-on-rails ruby-on-rails-5 ruby-on-rails-6

我有一个来自 GraphQL 的对象。我需要处理一个字段,然后返回一个哈希值。

为此,我最初尝试使用该to_h方法。但是当我尝试更改该字段中的值时,出现此错误:

FrozenError - 无法修改冻结的哈希值

然后我就产生了使用该方法的想法dup。这个方法似乎“解冻”了原始对象:

object.to_h.dup
Run Code Online (Sandbox Code Playgroud)

但这对于“深”领域没有帮助。对于“深层”字段,我必须使用本地dup方法。

请告诉我是否有更正确的解决方案?

mu *_*ort 7

Rails(或者 ActiveSupport,如果你想学究气的话)修补了一个进行深层复制的deep_dup方法。Hash所以你应该可以说:

object.to_h.deep_dup
Run Code Online (Sandbox Code Playgroud)

获得哈希的完全可变版本。