Добавление параметров строки запроса для ссылки на
у меня возникли трудности с добавлением параметров строки запроса к link_to UrlHelper. Например, у меня есть представление индекса, которое имеет элементы пользовательского интерфейса для сортировки, фильтрации и разбиения на страницы (через will_paginate). Плагин will_paginate правильно управляет сохранением параметров строки запроса внутри страницы.
есть ли автоматический механизм для добавления параметров строки запроса к заданному именованному маршруту, или мне нужно сделать это вручную? Очень много исследований по этому, казалось бы, простому конструкция оставила меня невежественным.
Edit
некоторые проблемы:
-
Если у меня есть два параметра querystring, bucket & sorting, как установить определенное значение для одного из них в link_to, сохраняя текущее значение другого? Например:
<%= link_to "0", profiles_path(:bucket => '0', :sorting=>?? ) %>
-
Если у меня есть несколько параметров строки запроса, bucket & sorting & page_size, и я хочу установить значение одного из них, есть ли способ "автоматически" включить имена и значения остальных параметров? Например:
<%= link_to "0", profiles_path(:bucket => '0', [include sorting and page_size name/values here] ) %>
плагин will_paginate автоматически управляет своей странице в переменной и другими переменными строки запроса. Кажется, нет автоматического элемента пользовательского интерфейса для управления размером страницы. Хотя я видел код для создания списка выбора размеров страниц, я бы предпочел иметь элементы для этого (например). Часть этой проблемы связана с #2, часть связана с скрытие / отображение этого элемента пользовательского интерфейса на основе существования / отсутствия записей. Другими словами, Я хочу включить ссылки на размер страницы только в том случае, если на странице есть записи. Кроме того, я предпочитаю автоматически включать другие переменные QS (т. е. страницу, ведро, сортировку), а не включать их по имени в link_to.
4 ответа:
The API docs on link_to покажите несколько примеров добавления строк запросов к именованным и старым маршрутам. Это то, чего ты хочешь?
link_to
также может создавать ссылки с якорями или строками запроса:link_to "Comment wall", profile_path(@profile, :anchor => "wall") #=> <a href="/profiles/1#wall">Comment wall</a> link_to "Ruby on Rails search", :controller => "searches", :query => "ruby on rails" #=> <a href="/searches?query=ruby+on+rails">Ruby on Rails search</a> link_to "Nonsense search", searches_path(:foo => "bar", :baz => "quux") #=> <a href="/searches?foo=bar&baz=quux">Nonsense search</a>
Если вы хотите быстрый и грязный способ и не волнуйтесь о XSS атаки, используйте
params.merge
для сохранения предыдущих параметров. например,<%= link_to 'Link', params.merge({:per_page => 20}) %>
см.:https://stackoverflow.com/a/4174493/445908
в противном случае , проверить этот ответ: params.слияние и кросс-сайт сценариев
Если вы хотите сохранить существующие параметры и не подвергать себя атакам XSS, обязательно очистите хэш параметров, оставив только параметры, которые может отправлять ваше приложение:
# inline <%= link_to 'Link', params.slice(:sort).merge(per_page: 20) %>
Если вы используете его в нескольких местах, очищать параметры в контроллере:
# your_controller.rb @params = params.slice(:sort, :per_page) # view <%= link_to 'Link', @params.merge(per_page: 20) %>
в случае, если вы хотите пройти в блок, скажем, на кнопку glyphicon, как показано ниже:
<%= link_to my_url, class: "stuff" do %> <i class="glyphicon glyphicon-inbox></i> Nice glyph-button <% end %>
тогда передача параметров querystrings может быть выполнена через:
<%= link_to url_for(params.merge(my_params: "value")), class: "stuff" do %> <i class="glyphicon glyphicon-inbox></i> Nice glyph-button <% end %>