2017-12-11 16 views
0

Rails5 API에서 경로에 Contraints를 추가 할 수있었습니다. 예를 들어;포도에 쿼리 매개 변수 제약 조건을 적용하는 방법은 무엇입니까?

GET /hello => hello#index 
GET /hello?download => hello#download 

두 URL이 동일하다는 것을 알 수 있습니다. 차이점은 둘째로 제약이 있고 다운로드 매개 변수가 URL에 있으면 다른 동작으로 리디렉션됩니다.

포도는 어떻게 만들 수 있습니까? 나는 그들의 문서 나 이슈 목록에 어떤 자원도 찾을 수 없었다.

get :hello do 
    'I am a hello world page' 
end 

하지만 URL 내가 이것을 실행하려면 다음 사전 정의 된 일부 쿼리 매개 변수가있는 경우 :

get :hello do { ?download } 
    'download a file (for example)' 
end 

내가 params 함께 연주하고 requires PARAMS을 생성합니다. 아직 첫 번째 요청을 잡습니다.

이 내가 경로에 대한 레일 API를 사용하는 것입니다 :

class DownloadConstraint 
    def matches?(request) 
    request.query_parameters.key?('download') 
    end 
end 

UPDATE :이에 더 명확하게 할. 두 경로를 함께 사용하고 싶습니다. params bag은 실행 전에 매개 변수를 요구하는 데 사용할 수 있습니다. 달성하고자하는 것은 GET 매개 변수를 기반으로 라우트를 설정하고 싶습니다. 레일 '고급 제약 조건을 참조하십시오 :이 receieved 경우 http://guides.rubyonrails.org/routing.html#advanced-constraints

답변

0

이 선택적 매개 변수를 추가하고 재 :

params do 
    optional :download 
end 

get :hello do 
    redirect '/' if params[:download] 
end 
+0

감사합니다. 그러나 이것은 효과가 없습니다. 참조, 이것은 필요합니다 : 다운로드 매개 변수가 주어집니다. 하지만 그 매개 변수를 쓰지 않으면 어떻게 될까? 다른 작업으로 리디렉션하고 싶습니다. 매개 변수를 기반으로 경로를 실행하고 싶습니다. 나는 이미 내 질문에 구속력 표본을 가지고있다. ** : ** ** ** ** ** ** ** ** **을 사용하여': hello' **를 사용하고 싶습니다. 이 URL을 사용하면 URL에 URL을 넣지 않으면 "다운로드"가 누락되었다고 표시됩니다. http://guides.rubyonrails.org/routing.html#advanced-constraints – Pratha

+0

죄송합니다. 질문에 대한 오해가있었습니다. 선택적 매개 변수 및 리디렉션을 사용하여 처리 할 것입니다. – infused

+0

괜찮습니다. 실제로 HTTP 리디렉션을하고 싶지 않습니다. 레일스처럼 요청에 직접 응답하고 싶습니다. 나는 포도가이 옵션을 가질 것이라고 확신하지만 어떻게해야할지 모르겠다. Rails가 할 수 있다면, 포도도 할 수 있습니다 (아마도). 또는 사용자의 브라우저 또는 요청을 리디렉션하지 않고 요청을 다른 방법/경로로 내부적으로 리디렉션 할 수있는 방법이있을 수 있습니다. – Pratha