2

Rails 3.0.7 アプリで多くのパラメーターを指定して link_to ヘルパーを使用すると、Activesupport ドキュメントの Hash の to_param メソッドでおそらく言及されているように、辞書順に並べ替えられた URL が生成されます。例えば

link_to "my Link", {:u=>"user", :q=>"some query", :page=>"4"}

生成する

"/search?page=4&q=some+query&u=user"

しかし、私が欲しいのは

"/search?u=user&q=some+query&page=4"

link_to または url_for への params ハッシュで提供されているカスタムソートを実行できる人はいますか?

何かが欠けていない限り、これは link_to のドキュメントに示されている例と矛盾しているようです (ri link_toまたはファイル内のいずれか)/gems/actionpack-3.0.7/lib/action_view/helpers/url_helper.rb:215

  #   link_to "Nonsense search", searches_path(:foo => "bar", :baz => "quux")
  #   # => <a href="/searches?foo=bar&amp;baz=quux">Nonsense search</a>

もちろん、次のように手動で URL を作成することもできます

link_to "my Link", "/search?u=#{user}&q=#{query}&page=#{page}"

しかし、それには「Railsの方法」がなく、特定の文字のエスケープに問題があるため、最後のオプションになります。

4

2 に答える 2

1

Rails のコミット ログを掘り下げると、to_param sortが Rails 3.0.2 程度で再導入されているようです。ログは次のとおりです。

 $ git log activesupport/lib/active_support/core_ext/object/to_param.rb
...
commit 10dec0e65e1f4d87f411b4361045eba86b121be9
Author: Xavier Noria <fxn@hashref.com>
Date:   Tue Sep 28 00:32:20 2010 +0200

    let Hash#to_param and Hash#to_query sort again

    This was a regression introduced in 5c858220085dc4ddc1bec496747059dfbe32f1da. We bring
    sorting back because people rely on it, eg for constructing consistent cache keys.

commit 5c858220085dc4ddc1bec496747059dfbe32f1da
Author: Santiago Pastorino <santiago@wyeworks.com>
Date:   Thu Jul 22 05:08:34 2010 +0800

    Hash#to_param is doesn't use sort anymore, some tests added for Hash#to_param

...

" " を削除してファイルにモンキー パッチを適用したところ.sort、クエリ文字列の順序は希望どおりになりました。カスタムの to_param を実装すると、カスタムの並べ替え/並べ替えなしのクエリ文字列を取得するためのソリューションになりますか? その場合、どこに置くべきですか?

于 2011-05-19T08:56:18.190 に答える
-1

少し遅れていますが、この投稿に出くわした他の人にとっては、を使用するとto_query役立ちます。ここで古いドキュメントまたは新しいドキュメントを参照してください

于 2015-04-29T20:05:56.173 に答える