[RUBY-ON-RAILS] 레일 : LINK_TO에서 GET 쿼리 문자열 매개 변수 보존
RUBY-ON-RAILS레일 : LINK_TO에서 GET 쿼리 문자열 매개 변수 보존
나는 등 다른 records_per_page 값을 조회, 페이지 매김을 정렬 할 수 있습니다 결과의 목록을 반환 내 앱에서 일반적인 검색 기능이 각 옵션은 쿼리 문자열의 매개 변수에 의해 제어되고 있습니다. 단순화 된 예 :
/search?q=test&page=2
지금은 설정 records_per_page 값 10, 20, 30 각각의 링크가 매우 긴 설정을 할 수 있습니다 기존의 쿼리 매개 변수, 플러스 새로운 per_page 매개 변수를 포함해야 링크의 집합을 표시해야 말한다.
/search?q=test&page=2& ... &per_page=10
/search?q=test&page=2& ... &per_page=20
/search?q=test&page=2& ... &per_page=30
단지 LINK_TO 도우미와 함께 할 수있는 쉬운 방법이 아니면 내가 구문 분석하고 어떻게 든 이전 요청의 쿼리 문자열을 재현해야합니까?
해결법
-
==============================
1.
link_to 'Link', request.query_parameters.merge({:per_page => 20})
-
==============================
2.
link_to 'Link', params.merge({:per_page => 20})
-
==============================
3.쿼리 매개 변수와 NOT (경로을 통해 구입 한 제품을 포함하여) 모든 매개 변수를 사용하여 새로운 PARAMS을 병합하는 가장 간단한 방법은 request.query_parameters와 합병하는 것입니다
쿼리 매개 변수와 NOT (경로을 통해 구입 한 제품을 포함하여) 모든 매개 변수를 사용하여 새로운 PARAMS을 병합하는 가장 간단한 방법은 request.query_parameters와 합병하는 것입니다
link_to 'Search', search_path(request.query_parameters.merge({ per_page: 20 }))
그렇지 않으면 대신? foo는 = 바의 바 = 쿼리 문자열 예? 액션 = 인덱스 및 컨트롤러 = 제품 및 foo에 대한 경로 매개 변수를 중복으로 끝낼.
-
==============================
4.당신은 앱이 전송 될 수 있다는에만 PARAMS을 떠나 PARAMS 해시를 청소해야합니다, XSS 공격에 자신을 노출 기존 PARAMS을 유지하지하려면 :
당신은 앱이 전송 될 수 있다는에만 PARAMS을 떠나 PARAMS 해시를 청소해야합니다, XSS 공격에 자신을 노출 기존 PARAMS을 유지하지하려면 :
# inline <%= link_to 'Link', params.slice(:sort).merge(per_page: 20) %>
여러 장소에서 사용하는 경우, 컨트롤러에서 PARAMS를 청소 :
# your_controller.rb @params = params.slice(:sort, :per_page) # view <%= link_to 'Link', @params.merge(per_page: 20) %>
-
==============================
5.당신은 LINK_TO에서 PARAMS 해시의 요소를 던질 수 있습니다. 처럼
당신은 LINK_TO에서 PARAMS 해시의 요소를 던질 수 있습니다. 처럼
link_to "some_other_link", "/search", :page => params[:page]
-
==============================
6.는 어때
는 어때
<%= link_to 'Whatever', :overwrite_params => { :pear_page => 20 } %>
?
-
==============================
7.당신이 처리하는 링크가 request.params에서 제공 한되지 않은 경우이 작동합니다.
당신이 처리하는 링크가 request.params에서 제공 한되지 않은 경우이 작동합니다.
require 'rack/utils' require 'uri' def modify_query url, options={} uri = URI(url) query_hash = Rack::Utils.parse_query(uri.query) query_hash.merge!(options) uri.query = Rack::Utils.build_query(query_hash) uri.to_s end puts modify_query('/search?q=test&page=2&per_page=10', 'per_page' => 20) puts modify_query('/search?q=test&page=2', 'per_page' => 30) # Outputs # /search?q=test&page=2&per_page=20 # /search?q=test&page=2&per_page=30
-
==============================
8.약간 늦게 나는 알고있다 ..
약간 늦게 나는 알고있다 ..
사용자가 검색 결과를 필터링하는 방법으로 이것을 사용하는 경우 내 도우미를 보라 :
이 automagicly 모든 빈 불필요한 PARAMS을 제거하고 그것의 모든 새로운 params를 이미 설정된의 경우 "선택"클래스를 추가 할 수 있습니다.
def search_to s, args={} selected = 0 args.each do |k, v| selected = selected + 1 if params[k] == v.to_s || ( params[k].nil? && v.blank? ) end if @search_params_base.nil? @search_params_base = request.parameters.clone @search_params_base.delete(:action) @search_params_base.delete(:controller) @search_params_base.delete(:page) @search_params_base.delete_if{|k, v| v.nil? || v.blank?} @search_params_base.delete(:utf8) if @search_params_base[:keywords].nil? end search_params = @search_params_base.merge(args) search_params.delete_if{|k, v| v.nil? || v.blank?} link_to s, search_path + '?' + search_params.to_param, :class => selected == args.length ? 'selected' : nil end
그런 다음 당신의보기에서 이것을 사용할 수 있습니다 :
search_to '$80 to $110', :price => 80..110
또는 귀하의 경우 :
search_to '30 per page', :page => params[:page], :per_page => 30
from https://stackoverflow.com/questions/3762430/rails-preserving-get-query-string-parameters-in-link-to by cc-by-sa and MIT license
'RUBY-ON-RAILS' 카테고리의 다른 글
[RUBY-ON-RAILS] 루비 : 날짜의 범위를 만들기 (0) | 2020.03.01 |
---|---|
[RUBY-ON-RAILS] 3.2 레일 : Heroku가 푸시 거부, 더 세다 지원하는 응용 프로그램은 감지되지 (0) | 2020.03.01 |
[RUBY-ON-RAILS] 루비 레일에 - f.select에서 다중 선택 (0) | 2020.03.01 |
[RUBY-ON-RAILS] 콘솔 libreadline 때문에로드하지 않습니다 레일 (0) | 2020.03.01 |
[RUBY-ON-RAILS] 레일 응용 프로그램에서 Omniauth-으로 OAuth2를 사용하여 토큰을 새로 고침 (0) | 2020.03.01 |