3

是否可以将字符串转换为哈希,以便可以像哈希一样对其进行迭代?

"---
!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_trailgem 并尝试对不相邻的版本进行区分。这使我无法使用内置"changeset"哈希,它可以满足我的需求。

使用许多正则表达式,我可以处理这些字符串,但我想将它们转换为哈希值,"description"将其作为键,接下来的两项将是value.firstand value.last

用 调用字符串<%= version.object_changes %>。我怎么能把它称为哈希?

4

1 回答 1

10

您应该使用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

于 2014-05-22T17:10:48.447 回答