数组到字符串返回数组转换问题

时间:2010-02-12 21:53:04

标签: ruby-on-rails ruby string arrays

我正在将一堆ID保存到会话中。

session[:id_group] = 1,2,3,4,5

因为我需要将它们保存到带有表单的数据库中。

在那种形式中我有隐藏字段:

<%= form.text_field :group, :value => session[:id_group].inspect%>

我使用inspect来保存到数据库的值为[1,2,3,4,5]而不是12345

问题是,当我从数据库中获取该值时,我将[1,2,3,4,5]作为字符串。 如果我这样做:

groups = game.group
=> [1,2,3,4,5]
group.class 
=>string

我可以将它转换为这样的数组:

groups = game.group.split(',')

但是如果我这样做的话


groups.each |group| do
  puts |group|.to_s
end

我明白了


[1
2
3
4
5]

我需要干净的ID,所以我可以做像

这样的事情


but then if I do
groups.each |id| do
  User.find_by_id(id)
end

我该如何解决这个烂摊子? 提前谢谢。

2 个答案:

答案 0 :(得分:2)

您不应该使用inspect对您的值进行编码。这将被重新编码为文字字符串,这可能不是你的意图。

在表单中放置内容的正确方法是执行与解码方式相反的操作:

<%= form.text_field :group, :value => session[:id_group].join(',') %>

如果正确匹配了join和split,它将起作用。检查的对应物是eval,你真的不想这样做,因为有人可以用这种方式运行任意代码。

作为一个注释,您还可以使用以下内容加载一堆用户:

@ids = params[:group].split(/,/)

@users = User.find_all_by_id(@ids)

这比一次加载它们要有效得多。

答案 1 :(得分:0)

请参阅:Convert a stringified array back to array

groups.class
#=> String
groups = JSON.parse(groups)
#=> [1,2,3,4,5]
groups.class
#=> Array