Прохождение массива через hidden_field_tag в рельсах
-
12-10-2019 - |
Вопрос
Я нашел это вопрос Так, но это не помогло, правда.
Итак, я хотел бы пройти массив через скрытую бирку. На данный момент мой код:
<%= hidden_field_tag "article_ids", @articles.map(&:id) %>
Это, очевидно, не работает, поскольку он проходит идентификаторы в виде строки.
Как это сделать?
Решение
Привет, может быть, есть лучшее решение, но вы можете попробовать
<% @articles.map(&:id).each do |id| %>
<%= hidden_field_tag "article_ids[]", id %>
<% end %>
Другие советы
Вы можете попытаться проанализировать его в JSON и обратно:
articles_list = @articles.map(&:id).to_json # gives u: [1,2,3,4,5]
# note that the result is a string instead of an array
article_ids = JSON.parse(articles_list)
Или вы можете просто использовать запятую строку:
articles_list = @articles.map(&:id).join(",") # gives u: 1,2,3,4,5
# note that this result is a string also
article_ids = articles_list.split(/,/).map(&:to_i)
Следующее сработало для меня на рельсах 4.1.10
<% @your_array.map().each do |array_element| %>
<%= hidden_field_tag "your_array[]", array_element %>
<% end %>
На рельсах 4 вы можете сделать:
<% @articles.map(&:id).each do |id| %>
<%= hidden_field_tag "article_ids", value: id, multiple: true %>
<% end %>
Поскольку рельсы автоматически добавят «[]» на имя поля (при использовании multiple
) и контроллер, который получает форму, увидит это как массив значений.
Не связан с StackOverflow