2012-03-22 2 views
1

В Rails 3.0.11 в приложении, я использую обычные вспомогательные методы для генерации адреса для некоторых соединений (например:Спасаясь только строки запроса часть URL в Rails

home_url() # for the home page 
search_url() # for the search page 

и т.д. )

Я передаю кучу параметров, которые будут использоваться для создания строки запроса, которая затем добавляется к URL-адресу. например

search_url(:text => '123') # => http://mysite.com/search?text=123 

Некоторые из этих Params получить немного более сложным, и есть некоторые вложенные хэши, например

search_url(:text => '123', :categories => {:category_1 => 1, :category_2 => 2}) # => http://mysite.com/search?text=123&categories[category_1]=1&categories[category_2]=2 

У меня есть проблема в том, как избежать этого должным образом, чтобы он проверяет (против W3C HTML валидатор), особенно в отношении квадратных скобок. Если я использую h(), амперсанды экранируются, но в квадратных скобках все еще не выполняется проверка. Я могу использовать CGI.escape на всей строке, но это также будет кодировать все перед querystring, включая: // в начале адреса, что означает, что браузер будет относиться к нему как относительный URL, когда он должен быть абсолютным (это должно быть, я боюсь).

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

Приветствия

Адам

+2

Полностью несвязанной: рубин не требует '() 'для вызовов методов. – Reactormonk

+0

@ Tass, иногда это делает его более читаемым. Хотя не когда параметры не передаются. – Yule

+0

Я знаю, что это было давно, но я должен спросить: это повлияло на что-то другое, кроме валидатора? Другими словами, _why_ являются квадратными скобками, недопустимыми в строках запроса? – KaptajnKold

ответ

1

Это исправлено в рельсах 3.2. Под капотом это метод Hash # to_query, который выполняет эту работу.

3,0

{ :x => { :y => '[]' } }.to_query 
=> "x[y]=%5B%5D" 

3,2

{ :x => { :y => '[]' } }.to_query 
=> "x%5By%5D=%5B%5D" 

Возможно вырыть в источник, чтобы увидеть, какие изменения и портировать их в приложение

+0

Ах, хороший. Посмотрим, что там там. Приятно знать, что это все равно было рассмотрено. ура – Addsy

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