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}"

ハッシュのように見える文字列を作成しているだけで、それほど有用ではありません。キーを長い道のりでシンボル化したい場合は、おそらく次を使用して配列の配列を作成します。

...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 に答える