我正在像这样将一堆 ID 保存到 session 中。
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(',')
但如果我这样做
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
我该如何解决这个问题? 提前致谢。
最佳答案
您不应该使用 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)
这比一次加载它们要高效得多。
关于ruby-on-rails - 数组到字符串回到数组的转换问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2255366/