Передача массива в hidden_field_tag, преобразованный в строку - PullRequest
0 голосов
/ 11 апреля 2019

Я новичок в SOF, и если мой вопрос неясен или есть какие-либо другие проблемы, пожалуйста, укажите это вместо оценки меня, что произошло при единственном вопросе, который я задал 4 месяца назад, и мне пришлось его удалить. Прежде чем начать, я должен упомянуть, что я видел около десятка подобных вопросов, заданных здесь, но ни один из них точно не ответил на мою проблему.

Я пытаюсь передать массив хэшей в hidden_field_tag ​​в форме, но получаю строку. Что удивительно, так это то, что перед отправкой в ​​контроллер массив уже был изменен на строку, прежде чем он был назначен полю. Я понятия не имею, когда и где это произошло. Я подробно объясняю сценарий в разделе «фон».

У меня есть страница, которая показывает данные по городу, но из-за некоторых требований я должен отслеживать все города рядом. Я передал данные городов в массиве, и он отлично работает на странице, но у меня есть система «фильтров» для поиска конкретных данных. Фильтры представлены в виде частичной формы, которая отправляется на URL-адрес, и страница загружается с новыми данными. Для фильтров нужно пропустить и города. Я добавил hidden_field_tag ​​для всех данных, которые необходимо передать. Остальные данные работают нормально (например, идентификатор, город, категория и т. Д.), Но массив городов преобразуется в строку. Я пытался использовать hidden_field и множественный = true, но это не сработало, или, возможно, я использовал их с неправильным синтаксисом.

  = hidden_field_tag :cities, @cities
  = hidden_field_tag :longitude, params[:longitude]
  = hidden_field_tag :address, params[:address]
  = hidden_field_tag :category, params[:category]
  = hidden_field_tag :city, @city
  = hidden_field_tag :state, @state
  = hidden_field_tag :category, @category
  = hidden_field_tag :user_id, @user.id

1 Ответ

0 голосов
/ 11 апреля 2019

Мне удалось решить проблему с помощью моего старшего коллеги по:

1. In html/slim file:
     = hidden_field_tag :cities, @cities.map {|city| city.as_json}.to_json
2. Setting in controller:
     cities = params[:cities].is_a?(String) ? JSON.parse(params[:cities]) : params[:cities]
     cities.map { |city| city.with_indifferent_access }
.
I still am looking for suggestions if this approach is correct and would very much like to know if there is a better approach.
I will mark the person's answer correct if someone gives proper guidance. Thanks
...