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


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

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

Edit

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

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

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

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

4 184

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