2012-10-23 3 views
4

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

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

+0

возможно дубликат [рубин/рельсы эквивалентно яваскрипта decodeURIComponent?] (Http://stackoverflow.com/questions/6457925/ruby-rails-equivalent-to-javascript-decodeuricomponent) – bfavaretto

+0

Нет дубликата, как мой вопрос не связан с автоматическое декодирование параметров, а не внешний метод для этого. – gorootde

ответ

3

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

Если запрос 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 не расшифровывает строку запроса.

Смежные вопросы