纸质路径字符串转哈希值

4

是否可以将字符串转换为哈希值,以便像哈希表一样迭代访问?

"---
!ruby/hash:ActiveSupport::HashWithIndifferentAccess\ndescription:\n-
Original text blah blah.\n- New text blah blah.\nupdated_at:\n- 2014-05-12 09:18:21.000000000 Z\n-
2014-05-12 09:19:33.748593000 Z\n"

我正在使用 paper_trail 宝石并尝试对非相邻版本进行差异分析。这使我无法使用内置的 "changeset" 哈希,该哈希可以实现我想要的功能。
通过使用许多正则表达式,我可以处理这些字符串,但是我想将它们转换为哈希表,其中 “description” 将作为键,并且下两个条目将分别是 value.firstvalue.last
该字符串是使用 <%= version.object_changes %> 调用的。我怎样才能将其作为哈希表调用?

1
可能是字符串转哈希转换的重复问题。 - Pavel Tkackenko
这个字符串是如何创建的? - Uri Agassi
这是由paper_trail gem自动生成的。 - Ossie
至于可能的重复问题,我无法理解如何将那个答案应用到这个问题上。 - Ossie
1个回答

11
你应该使用version.changeset来获取对象更改的已解析哈希值。
如果你真的想要将那个字符串转换为 Ruby 对象 (ActiveSupport::HashWithIndifferentAccess),你可以:
str = "--- !ruby/hash:ActiveSupport::HashWithIndifferentAccess\ndescription..."
YAML.load(str)
# => {"description"=>["Original text blah blah.", "New text blah blah."], "updated_at"=>[2014-05-12 09:18:21 UTC, 2014-05-12 09:19:33 UTC]}

# or
PaperTrail.serializer.load(str)

请查看Papertrail::VersionConcern.changeset


我认为我不能使用version.changeset。正如我上面所说,我正在查看非相邻版本,因此根本无法调用changeset。我正在查看站点上所有类型的所有版本。这与更改集不兼容。你会把你那里的代码放在哪里?在模型中吗? - Ossie
1
嘿!“PaperTrail.serializer.load(str)”是一个很好的方法。这是在使用PaperTrail的方法时他们没有想到的方式,对吧?非常好,回答得很棒。 - Ossie

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接