I have a 일반적인 검색 결과 페이지가 매겨진 내 앱 목록을 반환하는 협업공간의 정렬할지, 서로 다른 값을 사용하여 볼 수 있는, records_per_page, etc. 각각의 옵션은 매개 변수에 의해 제어됩니다 쿼리하지 구체화하십시오. 간단한 예를 들어:
/search?q=test&page=2
이제 말하도다 표시하십시오 records_per_page 값을 설정할 수 있는 링크를 데릭쉐퍼드와 일련의 10, 20, 30. 각 https://partner. 기존 포함시키십시오 쿼리하지 매개변수입니다 될 수 있는 매우 긴 설정되었습니다 합니다 물론, 새로운 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 도우미 이전 요청을 짐작이지만요.?
가장 간단한 방법은 아닌 새로운 params) 와 함께 모든 매개변수입니다 병합합니다 쿼리하지 매개변수입니다 병합하려면 request.query_parameters 를 포함하여 경로를 통해 얻은) 는
link_to 'Search', search_path(request.query_parameters.merge({ per_page: 20 }))
그렇지 않으면, 예를 들어 'end up with 쿼리하지 문장열 복제 경로 매개변수입니다 action =, =, = 표시줄에는' 대신 'foo? index& 컨트롤러거 products& foo? = 표시줄에는'.
자신을 노출시키는 XSS 공격을 하지 않고 기존 params 유지하려면, 반드시 해당 app 이 params 청소하려면 해시보다 확인란만 params 보낼 수 있습니다.
# inline
<%= link_to 'Link', params.slice(:sort).merge(per_page: 20) %>
& nbsp;;
이용할 경우, 여러 곳에 있는 params 청소하십시오 컨트롤러거:
# your_controller.rb
@params = params.slice(:sort, :per_page)
# view
<%= link_to 'Link', @params.merge(per_page: 20) %>
이 경우, 주어진 # 39 는 링크 처리하는 aren& 리퀘스트스파르타 s. 얻을 수 없다.
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
조금 늦은 그러니까말이야.
경우 이를 빌미로 운행에서어떠한 검색 결과가 필터링하려면 보면 내 도우미:)
이 모든 불필요한 params) 및 추가 절감뿐만 오토매직리 비어 있고, 클래스 " selected". # 39 의 경우 이미 모든 it& 새로운 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