Добавить параметры querystring для ссылки на

мне трудно добавлять параметры querystring в link_to UrlHelper. Например, у меня есть представление индекса, в котором есть элементы UI для сортировки, фильтрации и разбиения на страницы (через will_paginate). Плагин will_paginate правильно управляет внутристраничным сохранением параметров querystring.

есть ли автоматический механизм для добавления параметров querystring в именованный маршрут, или мне нужно сделать это вручную? Много исследований по этому, казалось бы, простому конструкт оставил меня в неведении.

редактировать

некоторые проблемы:

  1. Если у меня есть два параметра querystring, bucket & sorting, как установить определенное значение для одного из них в link_to, сохраняя текущее значение другого? Например:

    <%= link_to "0", profiles_path(:bucket => '0', :sorting=>?? ) %>
    
  2. Если у меня есть несколько параметров querystring, bucket & sorting & page_size, и я хочу установить значение для одного из них, есть ли способ "автоматического" включения имен и значений оставшихся параметров? Например:

    <%= link_to "0", profiles_path(:bucket => '0', [include sorting and page_size name/values here] ) %>
    
  3. плагин will_paginate автоматически управляет своей переменной страницы и другими переменными querystring. Кажется, нет автоматического элемента пользовательского интерфейса для управления размером страницы. Хотя я видел код для создания списка выбора размеров страниц, я бы предпочел иметь элементы для этого (например). Часть этой проблемы связана с #2, часть связана с скрытие / отображение этого элемента пользовательского интерфейса на основе существования / отсутствия записей. Другими словами, Я хочу включить ссылки размера страницы, только если есть записи на страницу. Более того, я предпочитаю автоматически включать другие переменные QS (т. е. страницу, ведро, сортировку), а не включать их по имени в link_to.

4 ответов


на документы API на link_to показать некоторые примеры добавления строк запросов к именованным и oldstyle маршрутам. Это то, что вы хотите?

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&amp;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 %>