2017-12-07 10 views
1

이의 다음 라우터 보자 범위에서 요청을 잡아라 : 요청이 로케일을 지정하는 경우레일 : 요청이 범위에 아무것도 일치하지 않을 때

Rails.application.routes.draw do 
    scope ":locale", locale: /en|nl/ do 
    get "/:slug", to: "pages#prefixed_action", constraints: { slug: /.*/ } 
    end 

    root to: "pages#simple_action" 
    get "/:slug", to: "pages#simple_action", constraints: { slug: /.*/ } 
end 

을, 범위는 그것을 잡아에 전달 pages#prefixed_action. 그렇지 않은 경우 요청은 pages#simple_action으로 전달됩니다.

브라우저에 localhost:3000/en을 입력하면 스코프에 걸리지 않습니다. 내가 어떻게 준비 할 수 있니?

EDIT1 : 나는 "페이지 번호의 prefixed_action"에 라우팅 할 수 요청을하고 싶습니다

Edit2가 : 코드 샘플에서 root 선언이 가능성의

+0

을 마지막 경로로

get '/:locale', to: "pages#simple_action", constraints: { locale: /.*/ } 

을 넣어, 나는'제약을 믿는다 : {슬러그 : /.*/}'절은 필요하지 않습니다. – Brian

답변

3

한 범위 내에서 root을 지정하는 것입니다 추가 : 단순히 이런 어쩌면

scope ":locale", locale: /en|nl/ do 
    root 'pages#prefixed_action' 
    get "/:slug", to: "pages#prefixed_action", constraints: { slug: /.*/ } 
end 
+0

죄송합니다. 내 질문이 정확하지 않았습니다. 범위 밖에 이미'root' 선언이 있습니다. 그래서 범위 안에'/ admin/cms/block_contents/42537/edit'을 추가하면 ArgumentError at/ 이 생성됩니다. 이미 사용중인 경로 이름이 잘못되었습니다 : 'root'' –

+0

'get '/'=> ... ', 당신은 "루트"메소드를 필요로하지 않습니다. – meagar

+0

루트는 범위를 나타냅니다. 따라서 이미 범위 밖의 하나의 루트를 가지고 있다는 것은 중요하지 않습니다. 양쪽 모두 (루트와 스코프 내부에 들어가기)가 같은 컨트롤러 액션'pages # prefixed_action'을 가리 키기 때문에 에러가 발생합니다. root에 대해 다른 조치를 지정하십시오. 예 :'root 'pages # index'' ('PagesController' 안에'index' 메소드를 생성하십시오). – maicher

1

:

get '/:locale', to: "pages#prefixed_action", constraints: { locale: /(en|nl)/ } 
get '/:locale', to: "pages#simple_action", constraints: { locale: /.*/ }  

경로가 /en/nl이고 기타가 모두 pages#simple_actionpages#prefixed_action으로 보내는 것이 목표 인 경우. 그렇다면, 아래 @ maicher의 훌륭한 대답 또한 당신의 경로에