Добавить параметры строки запроса в link_to - PullRequest
194 голосов
/ 23 апреля 2010

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

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

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

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

  1. Если у меня есть два параметра строки запроса, bucket и sort, как установить конкретное значение для одного из них в 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 автоматически управляет своей переменной страницы и другими переменными строки запроса. Кажется, не существует автоматического элемента пользовательского интерфейса для управления размером страницы. Хотя я видел код для создания списка выбора размеров страниц, я бы предпочел для этого элементы A (например, SO). Часть этой проблемы связана с # 2, часть связана с сокрытием / показом этого элемента пользовательского интерфейса на основе наличия / отсутствия записей. Иными словами, я хочу включить ссылки размером с страницу только при наличии записей на странице. Более того, я предпочитаю автоматически включать другие переменные QS (то есть страницу, корзину, сортировку), а не включать их по имени в link_to.

Ответы [ 4 ]

319 голосов
/ 23 апреля 2010

Документы API для 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>
49 голосов
/ 01 апреля 2012

Если вы хотите быстрый и грязный способ и не беспокоиться о XSS-атаке, используйте params.merge, чтобы сохранить предыдущие параметры.например,

<%= link_to 'Link', params.merge({:per_page => 20}) %>

см .: https://stackoverflow.com/a/4174493/445908

В противном случае проверьте ответ: params.merge и межсайтовый скриптинг

24 голосов
/ 10 мая 2014

Если вы хотите сохранить существующие параметры и не подвергать себя атакам 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) %>
3 голосов
/ 29 августа 2014

В случае, если вы хотите передать блок, скажем, кнопке глифика, как показано ниже:

<%= link_to my_url, class: "stuff" do %>
  <i class="glyphicon glyphicon-inbox></i> Nice glyph-button
<% end %>

Тогда передача параметров строки запроса может быть выполнена через:

<%= link_to url_for(params.merge(my_params: "value")), class: "stuff" do %>
  <i class="glyphicon glyphicon-inbox></i> Nice glyph-button
<% end %>
...