Массив в строку Обратно к проблеме преобразования массива - PullRequest
3 голосов
/ 13 февраля 2010

Я сохраняю кучу идентификаторов в сеансе вот так.

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

Потому что мне нужно сохранить их в базе данных с формой.

В этой форме у меня есть скрытое поле:

* +1007 *

Я использую проверку, чтобы значение, сохраненное в базе данных, было [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(',')

но тогда, если я сделаю

<code>
groups.each |group| do
  puts |group|.to_s
end

я получаю

<code>
[1
2
3
4
5]

И мне нужны чистые идентификаторы, чтобы я мог сделать что-то вроде

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

Как я могу исправить этот беспорядок? Заранее спасибо.

Ответы [ 2 ]

2 голосов
/ 13 февраля 2010

Вы не должны кодировать свои значения, используя inspect. Это будет перекодировано в буквальную строку, что, вероятно, не является вашим намерением.

Правильный способ поместить вещи в вашу форму - это сделать противоположное тому, как вы хотите их декодировать:

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

Там, где соединение и разделение сопоставлены правильно, это будет работать. Партнером для проверки является eval, и вы действительно не хотите этого делать, поскольку кто-то может выполнить произвольный код таким способом.

Как примечание, вы также можете загрузить группу пользователей одним запросом, используя что-то вроде:

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

@users = User.find_all_by_id(@ids)

Это гораздо эффективнее, чем загружать их по одному за раз.

0 голосов
/ 20 ноября 2015

См .: Преобразовать строковый массив обратно в массив

groups.class
#=> String
groups = JSON.parse(groups)
#=> [1,2,3,4,5]
groups.class
#=> Array
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...