我使用hstore与Postgres 9.2和Rails 3.2来存储我的对象:
class User
user_hstore = {:user_id =>"123", :user_courses => [1,2,3]}
end
现在,当我检索user_courses时,我得到一个这样的字符串:
'[1, 2, 3]'
如何将此字符串转换为Rails数组?更好的是,有没有办法在hstore对象中存储数组,以便Rails自动将其作为数组类型检索?
答案 0 :(得分:8)
JSON.parse "[\"1018\", \"1037\", \"1045\", \"1042\"]"
#=> ["1018", " 1037", " 1045", " 1042"]
答案 1 :(得分:6)
为什么不使用eval
?
eval('[1, 2, 3]')
#=> [1, 2, 3]
显然,不要在任意或用户输入的数据上执行此操作,但在您显示的整数数组上,它非常安全。
答案 2 :(得分:1)
将其转换为数组:
user_courses.gsub('[', '').gsub(']', '').split(",")
为了使检索更简单,您可以通过执行
将其存储为字符串user_hstore = {:user_id =>"123", :user_courses => '1,2,3'}
答案 3 :(得分:1)
只是把另一顶帽子扔进戒指,这就像Vimsha的回答一样,但你可以做的更短,更甜蜜:
"[1,2,3,4]"[1..-2].split(",")
在你的情况下可能是:
user_courses[1..-2].split(",")
编辑: 如果速度是一个问题我做了一个快速的基准,可以找到here。只做几件物品不是一个很大的区别,但10,000件物品+你可以开始看到差异。这是100,000件物品:
# "[1,2,3,4]"[1..-2].split(",")
0.110000 0.000000 0.110000 ( 0.114739)
# "[1,2,3,4]".gsub("[", "").gsub("", "]").split(",")
1.080000 0.000000 1.080000 ( 1.081227)