ruby-on-rails - 数组到字符串回到数组的转换问题

标签 ruby-on-rails ruby string arrays

我正在像这样将一堆 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/

相关文章:

ruby-on-rails - 如何从 Rails 中的价格字段中删除 "$"和 ","

Ruby:安装 bundler gem 时出现奇怪的错误

Ruby 从预先存在的 key 字符串创建密码 key

python - 从文件中删除非 ASCII *行*?

Javascript 日期时间从字符串解析

c++ - 在 Windows 上的 C++ 中的 for 循环中创建多个目录

ruby-on-rails - 使用 gmail 配置 Rails 邮件程序 smtp

ruby-on-rails - 安装/bundle gem unf_ext -v '0.0.6' 时出错

ruby-on-rails - 如何验证 Rails 中的日期?

ruby-on-rails - RSpec:如何期望两个不同对象上的有序消息?