Ruby on Rails консолидирует парамы запросов с одинаковым именем в один и тот же параметр URL
У меня есть форма ввода множественный такой:
select_tag "activity_types[#{category}]", options_from_collection_for_select(ActivityType.all, "id", "name"), multiple: true
, который генерирует разметку, подобную этой:
<select id="activity_types_category" multiple="multiple" name="activity_types[category][]"><option value="2">Foo</option>
<option value="3">Bar</option>
<option value="4">Baz</option>
</select>
Именно этого я и хочу. Проблема в том, что когда все параметры выбраны и форма отправлена, url-адрес выглядит примерно так:
?activity_types%5Bcategory%5D%5B%5D=2&activity_types%5Bcategory%5D%5B%5D=3&activity_types%5Bcategory%5D%5B%5D=4
Это прекрасно работает. Однако я столкнулся с некоторыми проблемами, когда заполненный url-адрес был слишком длинным для стороннего сервиса. Они используют url-адрес в качестве парама в своем собственном url-адресе. И мой адрес вызвало 414 Запрос-URI слишком большая ошибка. Мне интересно, есть ли способ сделать строку запроса такой:
?activity_types%5Bcategory%5D%5B%5D=2,3,4
Что исправит проблему, с которой я столкнулся, и сделает url-адрес немного более читаемым.
Заранее спасибо!
1 ответ:
Проблема заключается в том, что вы отправляете данные формы в запросе GET через URL. Как правило, данные формы должны быть отправлены по почте, которая не имеет этого ограничения.
И вы не должны пытаться изменить структуру запроса, которую Rails (via rack) использует для построения хэша params. Это, вероятно, вызовет у вас огромную головную боль в будущем...