将字符串化数组转换回数组

我使用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自动将其作为数组类型检索?

 JSON.parse "[\"1018\", \"1037\", \"1045\", \"1042\"]" #=> ["1018", " 1037", " 1045", " 1042"] 

为什么不使用eval

 eval('[1, 2, 3]') #=> [1, 2, 3] 

显然,不要对任意或用户输入的数据执行此操作,但是在显示的整数数组上,它是非常安全的。

要将其转换为数组:

 user_courses.gsub('[', '').gsub(']', '').split(",") 

为了使检索更简单,您可以通过执行将其存储为字符串

 user_hstore = {:user_id =>"123", :user_courses => '1,2,3'} 

只是为了给戒指扔另一顶帽子,这就像Vimsha的回答一样,但你可以做的更短,更甜美:

 "[1,2,3,4]"[1..-2].split(",") 

在你的情况下可能是:

 user_courses[1..-2].split(",") 

编辑:如果速度是一个问题,我做了一个快速的基准,可以在这里找到。 只做几件物品不是一个很大的区别,但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)