数组转换为字符串再转回数组的问题

3

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

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

因为我需要将它们保存到一个带有表单的数据库中。
在该表单中,我有一个隐藏字段:
<%= form.text_field :group, :value => session[:id_group].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(',')

but then if I do


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

I get


[1
2
3
4
5]

我需要干净的ID,这样我就可以执行类似以下的操作:


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

我该如何解决这个问题呢?提前感谢。

2个回答

2

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

在表单中正确的方法是做相反的事情,即与解码相反:

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

如果 join 和 split 能够正确匹配,它将会正常工作。inspect 的对应物是 eval,你真的不想这样做,因为别人可以通过这种方式运行任意代码。

另外需要注意的是,您也可以使用以下语句一次性加载多个用户:

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

@users = User.find_all_by_id(@ids)

这比逐个加载它们要高效得多。

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接