1

我在尝试:

Product.first.attributes.map{|k, v| "#{k.to_sym} => #{v}"}

但是,我收到如下输出:

["id => 53", "name = blah"], ["id => 54", "name = blahblah"]

我想要的是:

[{:id=>53,:name=>"blah"}, {:id=>54,:name=>"blahblah"}]
4

1 回答 1

6

看起来您只是想将Product.first.attributes哈希转换为带有键符号而不是字符串的哈希。您可以通过调用symbolize_keysRails(实际上是 ActiveSupport)已修补到 Hash 中来使自己变得轻松:

h = Product.first.attributes.symbolize_keys

当你这样说时:

"#{k.to_sym} => #{v}"

您只是在生成一个看起来有点像 Hash 的字符串,这并不是非常有用。如果您想长时间地符号化键,您可能会使用以下方法生成一个数组数组:

...map { |k, v| [ k.to_sym, v ] }

然后把整个东西喂给Hash[]

h = Hash[Product.first.attributes.map { |k, v| [ k.to_sym, v ] }]

不过,我不会为所有这些噪音而烦恼,只需使用symbolize_keys并继续解决更有趣的问题。

于 2013-02-03T06:49:01.863 回答