2012-02-02 3 views
0

town_center 컨트롤러, 제재소 컨트롤러, 채석 컨트롤러 등과 같은 컨트롤러가 여러 개있는 상황이 있습니다.경로를 기반으로하는 다른 컨트롤러 : 이름

내 응용 프로그램의 URL은/town_center/view 또는 sawmill/view, quarry/view 등이 될 필요가 있습니다.

문제는 이러한 경로를 실제로 작성하는 방법입니다. 예를 들어, town_center 컨트롤러의 경우 다음과 같은 문자가 있습니다.

scope :path => '/town_center', :controller => :town_center do 
    get '/view/' => :view, :as => 'town_center' 
    end 

이 작업은 정상적으로 작동하지만 문제가 있습니다. 실제로 town_center 컨트롤러에서 view 액션을 실행할 때 url에 params 속성으로 존재하지 않기 때문에 건물의 ID를 가져 오는 간단한 방법은 없습니다.

get '/view/:name' => :view, :as => 'view_building' 

하지만 그 접근 방식에 문제가 모든 것이 하나의 컨트롤러로 연결됩니다 있다는 것입니다 :

하나 개의 간단한 아이디어는 같은 경로를 생성하는 것입니다. 그래서, 내 질문은 어떻게 URL에 식별자가 여전히 특정 컨트롤러로 리디렉션되도록 만들 수 있습니까?

또는 이것이 일반적인 아이디어로 올바르지 않다고 생각하면 더 좋은 방법이 있습니까?

답변

1

레일스 애플리케이션의 표준이 된 RESTful 라우팅을 사용할 수 있습니다.

MyApp::Application.routes.draw do 
    resource :town_center 
    resource :sawmill 
    resource :quarry 
end 

이 자동으로 당신에게 작성, 읽기, 업데이트에 필요한 경로를 모두 제공하고 다양한 모델을 파괴합니다 : 코멘트에 제안 편집 또는 단일 경로에 대한

MyApp::Application.routes.draw do 
    resources :town_centers 
    resources :sawmills 
    resources :quarries 
end 

, .

rake routes을 실행하면 애플리케이션에서 사용할 수있는 모든 경로가 표시됩니다. 여기에는 GET /town_centersGET /town_centers/:id 형식의 GET 경로가 포함되며, 후자는 TownCentersController에 표시 동작을 실행하고 /views/town_centers/show.html.erb보기 템플릿을 렌더링합니다. 당신이 레일에 새이고 아직 가이드를 라우팅 또는 을 시작하기 읽지 않았다면

, 그들은 여기에서 찾을 수 있습니다 :

가 레일 시작하기 : http://guides.rubyonrails.org/getting_started.html

레일 라우팅 : http://guides.rubyonrails.org/routing.html

+0

네, 저는 이것들을 알고 있지만 리소스를 사용하는 것을 좋아하지 않습니다. 수동으로 경로를 작성하는 것을 선호합니다. 나는 단지 : id를 url의 일부로 사용할 수 있다는 것을 알고 있지만, 하나의 id가있는 town_center가 하나뿐이므로 중복되는 느낌이 들었다. 하지만 나는 걷는 것이 안전한 길이라고 생각합니다. – Spyros

+0

각 엔티티의 ID가 정적이라고 말하는 것입니까? ID가 하드 코딩 된 ID라면 경로 정의의 일부로 전달할 수 있어야합니다. 예 :'get '/ view /'=> :보기, : as as => 'town_center', : id => 14' – Ryan

+0

경로 리소스가 복수 일 필요는 없습니다. 자원 : town_center가있을 수 있습니다. 나는 당신 자신의 길을 굴리는 것을 추천하지 않을 것이다. –

관련 문제