Как создать пользовательский отсортированный URL строки запроса в Rails link_to? - PullRequest
1 голос
/ 18 мая 2011

Когда я использую помощник link_to в приложении Rails 3.0.7 со многими параметрами, он генерирует лексикографически отсортированный URL, как, вероятно, упоминается в методе to_param для Hash в документации Activesupport. например,

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

создает * * +1004

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

но я хочу

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

Кто-нибудь может выполнить пользовательскую сортировку, как указано в хэше params для link_to или url_for?

Если я что-то упустил, похоже, это противоречит примеру, приведенному в документации для 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 way' и возникнет некоторая проблема в Escapeing определенных символов, поэтому будет последний вариант.

Ответы [ 2 ]

1 голос
/ 19 мая 2011

Просматривая журналы коммитов рельсов, кажется, что to_param sort повторно вводится в рельсах 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 быть решением для получения пользовательской строки запроса сортировки / отсутствия сортировки? В таком случае, куда его нужно положить?

0 голосов
/ 29 апреля 2015

Немного поздно, но для кого-то, кто сталкивается с этим постом, использование to_query может помочь.Смотрите здесь старые документы или новые документы

...