4

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

4

4 回答 4

10
JSON.parse "[\"1018\", \"1037\", \"1045\", \"1042\"]"
#=> ["1018", " 1037", " 1045", " 1042"]
于 2014-10-24T00:09:37.953 回答
9

为什么不直接使用eval

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

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

于 2014-03-07T20:44:20.760 回答
2

要将其转换为数组:

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

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

user_hstore = {:user_id =>"123", :user_courses => '1,2,3'}
于 2013-06-12T00:13:59.297 回答
1

只是为了把另一顶帽子扔进戒指,这与 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)
于 2013-06-12T02:31:37.023 回答