2017-12-11 2 views
1

하나의 액션 블록에서 2 개의 비슷한 경로를 잡아 내고 싶습니다. Rails5에서는 쉽게 할 수 있습니다. 내가 처음이 선언이 날만큼 폴더 끝에 마지막 파일 이름에서 a/b/c/d...:file처럼 될 수 :folder을 잡을 수 있습니다포도에서 한 블록에 두 개의 경로를 만드는 방법은 무엇입니까?

get ':folder/:file' => 'get#index', :file => /.*/, :folder => /.*/ 
get ':file' => 'get#index', :file => /.*/ 

. 둘째로 파일 이름 만 잡을 수도 있습니다. 두 경로 모두 동일한 작업을 대상으로합니다.

그러나, 포도에서이 메소드 정의에 블록이 아닌 경로로 선언되어 있기 때문에, 나는

잡을 수있는 방법이 있나요 ... 두 번 같은 블록을 작성해야 모두 /as/many/folder/and/file.ext 한 경로에서 바로 /file.ext 매개 변수? 나는 선택적 매개 변수, 요구 사항을 시도했다. 그들 중 누구도 일하지 않았습니다.

:folder/:file (두번 regexp)을 사용하는 이유는 수동으로 분할하지 않고 :folder 매개 변수와 :file 매개 변수를 별도로 잡을 수 있기 때문입니다.

get ':folder/:file', requirements: { file: /.*/, folder: /.*/ } do 
    # params[:folder] and params[:file] 
end 

get ':file', requirements: { file: /.*/ } do 
    # params[:file]. [:folder is empty.] 
end 

^^ 나는 그들을 하나의 단일 경로로 만들고 싶습니다. 폴더가 존재하면 (중첩 된 경우) 폴더 param에서 폴더를 가져오고 그렇지 않으면 폴더는 nil이됩니다.

답변

2

확인. 나는 refdocs를 시도해보고 그 해답을 발견했다.

get '(:folder/):file', requirements: { folder: /.*/, file: /.*/ } do 

예상대로 작동합니다.

관련 문제