[ruby-on-rails] link_to에 querystring 매개 변수 추가

link_to UrlHelper에 querystring 매개 변수를 추가하기가 어렵습니다. 예를 들어 정렬, 필터링 및 페이지 매김을위한 UI 요소가있는 인덱스보기가 있습니다 (will_paginate를 통해). will_paginate 플러그인은 querystring 매개 변수의 페이지 내 지속성을 올바르게 관리합니다.

주어진 이름의 라우트에 querystring 매개 변수를 추가하는 자동 메커니즘이 있습니까? 이 겉보기 간단한 구조에 대한 많은 연구가 저에게 실마리가되었습니다.

편집하다

몇 가지 과제 :

  1. 버킷 및 정렬이라는 두 개의 쿼리 문자열 매개 변수가있는 경우 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 플러그인은 페이지 변수 및 기타 쿼리 문자열 변수를 자동으로 관리합니다. 페이지 크기를 관리하기위한 자동 UI 요소가없는 것 같습니다. 페이지 크기의 선택 목록을 작성하는 코드를 보았지만 SO와 같은 A 요소가 있습니다. 이 과제의 일부는 # 2와 관련이 있으며, 일부는 레코드의 존재 여부에 따라이 UI 요소를 숨기거나 표시하는 것과 관련이 있습니다. 다른 방법으로, 페이지에 레코드가있는 경우에만 페이지 크기 링크를 포함하고 싶습니다. 또한 다른 QS 변수 (예 : 페이지, 버킷, 정렬)를 link_to에 이름별로 포함시키지 않고 자동으로 포함하는 것을 선호합니다.



답변

link_toAPI 문서 는 명명 된 경로와 이전 스타일 경로에 쿼리 문자열을 추가하는 몇 가지 예를 보여줍니다. 이것이 당신이 원하는 것입니까?

link_to 앵커 또는 쿼리 문자열이있는 링크를 생성 할 수도 있습니다.

link_to "Comment wall", profile_path(@profile, :anchor => "wall")
#=> <a href="https://stackoverflow.com/profiles/1#wall">Comment wall</a>

link_to "Ruby on Rails search", :controller => "searches", :query => "ruby on rails"
#=> <a href="https://stackoverflow.com/searches?query=ruby+on+rails">Ruby on Rails search</a>

link_to "Nonsense search", searches_path(:foo => "bar", :baz => "quux")
#=> <a href="https://stackoverflow.com/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.merge 및 cross site scripting


답변

기존 매개 변수를 유지하고 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) %>


답변

예를 들어 다음과 같이 글리프 콘 버튼에 대한 블록을 전달하려는 경우 :

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


답변