#ruby-on-rails #ruby-on-rails-3 #link-to #query-parameters #url-for
#ruby-on-rails #ruby-on-rails-3
Вопрос:
Когда я использую link_to helper в приложении Rails 3.0.7 со многими параметрами, оно генерирует лексикографически отсортированный URL-адрес, как, вероятно, упоминается в методе to_param для хэша в документации Activesupport. например
link_to "my Link", {:u=>"user", :q=>"some query", :page=>"4"}
генерирует
"/search?page=4amp;q=some queryamp;u=user"
но то, что я хочу, это
"/search?u=useramp;q=some queryamp;page=4"
Кто-нибудь может выполнить пользовательскую сортировку, указанную в хэше параметров для 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=baramp;amp;baz=quux">Nonsense search</a>
Конечно, я могу создать URL вручную, например
link_to "my Link", "/search?u=#{user}amp;q=#{query}amp;page=#{page}"
но в этом случае отсутствовал бы ‘Rails way’ и возникла бы некоторая проблема с экранированием определенных символов, поэтому это был бы последний вариант.
Комментарии:
1. Просто любопытно, но зачем вам это делать?
2. У меня такое чувство, что если порядок параметров строки запроса важен, что-то еще может быть неправильным.
3. для отображения от более важной информации к менее важной. пользователь или запрос важнее страницы, когда URL отображается в контексте третьей стороны.
4. Вы используете Ruby 1.8 или 1.9?
5. Может быть, вам что-то нужно для Google Analytics???
Ответ №1:
Просматривая журналы фиксации rails, выясняется, что сортировка по параметру повторно вводится в 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 быть решением для получения строки запроса с пользовательской сортировкой / без сортировки? В таком случае, куда его следует поместить?
Комментарии:
1. Я полагаю, что сортировка используется для таких вещей, как кэширование действий, которое включает параметры. Сложно включить параметры в ключ кэша, если порядок параметров постоянно меняется.
Ответ №2:
Немного поздно, но для кого-то еще, кто столкнется с этим сообщением, использование to_query
может помочь. Смотрите здесь старые документы или новые документы
Комментарии:
1. К сожалению, неверно. to_query имеет псевдоним to_param. Предоставленная вами ссылка также показывает
sort!
во фрагменте кода.