Encodeuricomponent декодирует его в рельсах

Обычно рельсы магически декодируют все params. Теперь у меня есть javascript, который делает params="value="+encodeURIComponent('ab#cd');, а затем вызывает http://server/controller?value=ab%23cd. Если я получаю доступ к params[:value] в моем контроллере, он содержит ab%23cd, а не ab#cd, как я ожидал бы.

Как это решить? Почему рельсы не имеют автоматического декодирования этого параметра?

1 ответ

Рельсы "автоматически" обрабатывают параметры со следующей логикой.

Если запрос GET, он будет декодировать что-либо в строке запроса:

GET http://server/controller?value=ab%23cd
 On the server this will generate params['value'] as ab#cd

Если запрос является POST с строкой запроса, он не будет декодировать его:

POST http://server/controller?value=ab%23cd
 On the server this will generate params['value'] as ab%23cd

Если запрос является POST с параметрами данных, он будет декодировать его:

POST http://server/controller
 data: value=ab%23cd
 On the server this will generate params['value'] as ab#cd

Я подозреваю, что вы видите эту проблему, потому что вы включаете строку запроса с запросом POST вместо запроса GET, и поэтому Rails не расшифровывает строку запроса.

licensed under cc by-sa 3.0 with attribution.