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 2

1 ответ:

Проблема заключается в том, что вы отправляете данные формы в запросе GET через URL. Как правило, данные формы должны быть отправлены по почте, которая не имеет этого ограничения.

И вы не должны пытаться изменить структуру запроса, которую Rails (via rack) использует для построения хэша params. Это, вероятно, вызовет у вас огромную головную боль в будущем...