【发布时间】:2016-10-06 23:25:10
【问题描述】:
[1] pry(main)> o.items
=> [{"78"=>"{\"size\"=>\"96\", \"side\"=>[]}"}]
[2] pry(main)> o.items[0]
=> {"78"=>"{\"size\"=>\"96\", \"side\"=>[]}"}
[3] pry(main)> o.items[0]['78']
=> "{\"size\"=>\"96\", \"side\"=>[]}"
[4] pry(main)> o.items[0]['78']["side"]
=> "side"
第 4 行不应该返回一个空数组吗?它的回归“面”是怎么来的?
编辑
我发现这是在保存哈希数组后发生的(它是 postgresql 上的 hstore 数组)。
例如 这会按预期返回一个哈希值。
o.items << {78 => {"size" => 1, "side" => []}}
o.items
=> [{"78"=> {"size"=>"1", "side"=>[]}}]
但是保存后
o.save
o.items
=> [{"78"=>"{\"size\"=>\"96\", \"side\"=>[]}"}]
我最终执行了 eval(o.items[0]['78']) 将字符串转换回哈希,然后再对哈希进行任何更改并进行更新。这似乎非常不必要,有更好的选择吗?
【问题讨论】:
-
仔细看。
o.items[0]['78']是字符串,不是哈希。 -
@Aetherus 太棒了,谢谢
-
@Aetherus 这似乎回答了这个问题,你应该把它写成一个答案,这样它就更明显了。
-
怎么会这样?
-
"foobar"["oba"]是"oba","foobar"[/o.a/]也是。你在一个字符串中搜索"side",找到了。