Rails постоянно меняет мою строку "?" в "% 3F" - PullRequest
2 голосов
/ 13 января 2011

В основном, я просто хочу вставить это + "?direction=desc" во вспомогательный метод.

Но как только он анализирует, получается вот так ...

/organizations/search?order_by=contactable%3Fdirection%3Ddesc

Кто-нибудь знает способ обойти это?

Метод Мой Помощник:

def search_sort(name, sort_by, order = 'asc')
  link_to(name, url_for(:overwrite_params => { :order_by => sort_by + "?direction=desc" :page => nil }), :class => 'selected save_pushstate')
  ...

Я знаю, о чем ты думаешь. Просто добавьте: заказ в это. Проблема в том, что я использую AJAX-заставку из 175 путей.

$(".save_pushstate").live("click", function() {
  $.setFragment({"order_by" : $.queryString($(this).attr('href')).order_by});
  //$.setFragment({"direction" : $.queryString($(this).attr('href')).direction});
    return false;
});

И он переписывает мой URL только на один «фрагмент». Я не могу иметь два! Поэтому я решил, что если я смогу просто добавить параметр направления в жестком коде href, он сможет справиться со всем этим беспорядком.

1 Ответ

3 голосов
/ 13 января 2011

Попробуйте:

+ "?direction=desc".html_safe

Edit: Так как вы используете рельсы 2.3.5, попробуйте это:

def search_sort(name, sort_by, order = 'asc')
  link_to(name, url_for(:overwrite_params => { :order_by => sort_by + "?direction=desc" :page => nil }, :escape => false), :class => 'selected save_pushstate')
  ...

Обратите внимание на ": escape => false" в url_for.

Edit2: Прочитав это: http://www.ruby -forum.com / тема / 80381

В частности, этот отрывок:

Я думаю, что именно здесь возникает путаница возникающие. Есть два разных вида бежать дальше.

Похоже, вы говорите кодировка URL, которая использует "% xx" для представляют специальные символы.

Однако функция html_escape делает что-то совершенно другое. Это берет строку и превращает '&' в '&' и '<' в '<' и т. д., так что он может войти в HTML, не будучи интерпретируется как буквальные '&' s и '<' s. </p>

Экранирование специальных символов в URL использование схемы «% xx» обязательно, в противном случае они не являются действительными URL.

Я понял, что «экранирование», которое вы видите, - это кодирование URL, и оно не должно влиять на ваш запрос / сортировку и т. Д. Вы можете проверить это, взяв закодированный URL и напечатав его в браузере.

: escape => false отключить экранирование html, что означает, что опасные символы преобразуются в коды отображения, такие как «&» в «&» и «<» в «<» и т. Д., </p>

А "?" в вашем приложении должно быть "&":

+ "&direction=desc"

Надеюсь, это поможет. =)

...