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 の 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;
});

そして、私のURLを1つの「フラグメント」に書き換えます。2つなんてありえない!そこで、ハードコーディングされた href に方向パラメーターを追加するだけで、この混乱全体を処理できると判断しました。

4

1 に答える 1

3

試す:

+ "?direction=desc".html_safe

編集:レール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

具体的には、この抜粋:

ここで混乱が生じていると思います。2 種類のエスケープが行われています。

「%xx」を使用して特殊文字を表す URL エンコーディングについて話しているようです。

ただし、html_escape 関数はまったく異なることを行います。文字列を取り、'&' を '&' に、'<' を '<' に変換するなどして、リテラルの '&' および '<' として解釈されることなく HTML に入ることができます。

「%xx」スキームを使用して URL 内の特殊文字をエスケープすることは必須です。そうしないと、それらは有効な URL ではありません。

発生している「エスケープ」は URL エンコーディングであり、クエリや並べ替えなどに影響を与えるべきではないことに気付きました。エンコードされた URL を取得してブラウザに入力することでテストできます。

:escape => false html エスケープを無効にします。つまり、'&' を '&' に、'<' を '<' に変換するなど、危険な文字が表示コードに変換されます。

そしてその "?" あなたの追加では「&」でなければなりません:

+ "&direction=desc"

お役に立てれば。=)

于 2011-01-13T17:59:50.377 に答える