2014-09-21 3 views
0

TextsController가 있습니다. 각 Text는 다른 (고정 된) 유형일 수 있습니다.컨트롤러 이름 대신 동적 접두사가있는 레일스 자원 경로

"책"유형이 있다고 가정 해 보겠습니다. 나는 텍스트를 표시하기 위해 자원 경로를 만들려면, 나는 경로는 다음과 같이 할 :

/book/my-book

또 다른 유형, "수동"예를 들어, 다음 URL을 사용하여 연결되어야합니다 :

/manual/rtfm

글쎄, 나는 haveRTFM와 나는 내가이 일을해야한다고 생각하는 방법을 작동시킬 수 없습니다. 여기

내가 무엇을 시도했다입니다 : 정적 '텍스트'세그먼트가되어야하는 이유

text GET /:text_type/texts/:id(.:format) texts#show

내가하지 않습니다

scope '/:text_type' do 
    resources :texts, only: :show 
end 

rake routes

나에게 다음과 같은 경로 스펙을 보여줍니다 ?

그래서 나는 빈 path 옵션을 포함하여 시도 : 아무것도 변경되지 않습니다

scope '/:text_type', path: '' do 
    resources :texts, only: :show 
end 

, 나는 (from source)이 scope 내 첫 번째 인수가 실제로 path에 주어진 값보다 우선하기 때문에 같아요.
저를 얻었다 유일한 경로 설정은 내가 무엇을 찾고있어 이것이다 :

scope '/:text_type' do 
    resources :texts, only: :show, path: '' 
end 

완전히에 "[범위]는 주어진 기본 옵션 경로의 집합 scope의 목적을 물리 칠 것 ".

resources 호출에 대해 이전 양식 중 실제로 path을 덮어 쓰지 않는 이유는 무엇입니까?

나에게 버그가있는 것 같습니다.

버그 리포트를 제출해야합니까, 그렇지 않으면 f * 매뉴얼로 머리를 숙이시겠습니까? ^^

답변

1

먼저 범위를 지정합니다. 범위가있는 경로는 관리 영역에서와 마찬가지로 경로를 네임 스페이스로 지정하는 데 사용됩니다. 따라서 언급 된 경로가 올바르게 생성되고 버그가 없습니다 (버그 리포트가 필요하지 않습니다). 네임 스페이스에 대한 자세한 내용은 Controller Namespaces and Routing을 참조하십시오.
'Creating Vanity URLs in Rails' 을 따르거나 Railscast와 같은 friendly_id 보석을 사용하여 직접 매개 변수를 설정할 수 있습니다.
몇 가지 이유로 할 수있는 한 ID를 계속 사용 하겠지만.

+0

글쎄, 텍스트 형식 경로 접두사는 실제로 단순히 SEO에 대한 의미 론적 사실이며, 내부적으로 텍스트 유형 간의 구현에는 차이가 없습니다. 문서화 된 * 및 * 링크에 따르면 범위는 일련의 경로에 기본 속성을 적용하는 수단입니다. 그들은 예제에서 네임 스페이스를 사용하여 실제로 모듈 내부에 중첩 된 컨트롤러로 라우팅하는 네임 스페이스 효과를 해결합니다. 나는'scope'없이 원하는 것을 얻을 수 있지만 각 경로마다 내 경로 옵션을 반복해야만합니다. 복제본'scope'은 피할 수있는 곳입니다 ... –

+0

O.K. 나는 다른 방법으로 질문한다 : 당신은/book/my-book이나/manual/rtfm과 같은 경로를 (나는 그들이 GET 경로라고 가정) 무엇을 기대합니까? –

+0

흠 "my-book"또는 "rtfm"slug/id로 식별되는 텍스트를 표시하고 싶습니다. –