Rails不断改变我的字符串“?”成“%3F”

时间:2011-01-13 17:50:18

标签: ruby-on-rails ruby helpermethods

Basicaly我只想在辅助方法中插入这个+ "?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')
  ...

我知道你在想什么。只需添加:订购。问题在于我使用的是来自#175轨道广播的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中添加方向参数,它可以处理这整个混乱。

1 个答案:

答案 0 :(得分: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。

     

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

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

:escape => false禁用html转义,这意味着危险字符会转换为显示代码,例如'&'进入'&'和'<'进入'<'等,

和“?”你的追加应该是“&”:

+ "&direction=desc"

希望这会有所帮助。 =)