2016-11-04 3 views
1

prop의 변수 값을 this 스레드의 신사와 비슷한 전달 된 URL의 쿼리 문자열에서 가져 오려고합니다.URL이있는 경우 추출 URL을 가져옵니다.

URL에 검색어 문자열이 있지만 작동하지 않는 경우 작동합니다. CGI.parse undefined method 'split' for nil:NilClass 오류가 발생합니다. 조사를했는데 문제는 분할 할 쿼리가 없기 때문입니다.

그럼 내 질문에 어떻게 쿼리 문자열의 존재 여부를 테스트하고 CGI.parse를 통해 prop 쿼리 문자열 중 하나인지 확인하기 위해 실행할 수 있습니까? 난 아마 정규식을 통해 그것을 할 수 있다고 가정하지만 레일 솔루션이 있었으면 좋겠다.

도움을 주시면 감사하겠습니다.

고맙습니다

코드 : 나는 또한 URL 리퍼러의 도메인 이름을 얻으려고 . 그래서 내가 거기에 그 변수를 가지고 있습니다.

url = request.env['HTTP_REFERER'] 
encoded_url = URI.encode(url.to_s) 
parse = URI.parse(encoded_url) 
domain = parse.host 
puts domain 
params = CGI.parse(parse.query) 
puts params['prop'].first 

UPDATE : 내가 첨부 된 코드를 추가하여 멀리 갈 수있는 오류가 발생했습니다. 그러나 더 나은 Rails 솔루션이 있는지 궁금해하고 있습니다. 나는 여전히 레일스에 익숙하지 않기 때문에 제대로하고 있는지 확인하고 싶다. URL에 쿼리 문자열에서

if encoded_url.include? "?prop" 
    params = CGI.parse(parse.query) 
    puts params['prop'].first 
end 
+1

레일 튜토리얼을 끝내시겠습니까? 이것은 가장 기본적인 것들 중 하나입니다. 모든 요청은 어떤 HTTP 동사가 필요한 키 값을 얻기 위해 컨트롤러에서 사용할 수있는'params' 해시를 가지고 있는지에 관계 없습니다. –

+0

아, 나는 params 해시가 Rails URL에서만 접근 할 수 있다고 생각했습니다. 외부 URL에도 사용할 수 있는지 알지 못했습니다. 나는 내 질문과 우연히 마주 쳤다. 그래서 그것이 나를 믿게했다. 그러나 그것은 모든 경우에 효과가 있다는 것을 이해합니다. 고맙습니다. –

+0

이것이 당신을 위해 일했는지 여부를 알려주세요. :) –

답변

2

키는 URL이 응용 프로그램 자체 내부에 존재하지 않는 경우에도, params[] 해시를 사용하여 액세스 할 수 있습니다. 레일이 외부 세계와 통신하는 것이 편리하기 때문입니다. 레일은 params[] 해시 사용에 관해서는 모든 HTTP 동사를 동등하게 취급합니다.
사용법 : puts params[:your_key]

관련 문제