2

基本上我只想将它插入+ "?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')
  ...

我知道你在想什么。只需添加 :order 即可。问题是我正在使用#175 of railscasts 中的AJAX 历史保护程序。

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

它会将我的网址重写为一个“片段”。我不能有两个!所以我决定,如果我可以在 href 硬编码中添加方向参数,它就可以处理这整个混乱。

4

1 回答 1

3

尝试:

+ "?direction=desc".html_safe

编辑:由于您使用的是 rails 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')
  ...

注意 url_for 中的 ":escape => false"。

Edit2:阅读此内容后: http ://www.ruby-forum.com/topic/80381

特别是这段摘录:

我认为这就是产生混乱的地方。有两种不同的逃避方式。

听起来您在谈论使用 '%xx' 表示特殊字符的 URL 编码。

然而, html_escape 函数做了一些完全不同的事情。它接受一个字符串并将 '&' 转换为 '&' 和 '<' 转换为 '<' 等等,这样它就可以进入 HTML 而不会被解释为文字 '&'s 和 '<'s。

使用 '%xx' 方案转义 URL 中的特殊字符是强制性的,否则它们不是有效的 URL。

我已经意识到您看到的“转义”是 url 编码,它不应该影响您的查询/排序等。您可以通过获取编码的 url 并将其输入浏览器来测试它。

:escape => false 禁用html转义,表示将危险字符转换为显示代码,如'&'转换为'&'和'<'转换为'<'等,

还有“?” 在你的追加应该是“&”:

+ "&direction=desc"

希望这可以帮助。=)

于 2011-01-13T17:59:50.377 回答