2012-03-16 5 views
2

모델의 기본 라우팅 도우미를 무시해야하는 어플리케이션을 작성 중입니다. 그래서 Model/Model/[id]를 생성하는 model_path()라는 헬퍼를 가진 Model이라는 모델이 있다면. "/something/[model.name]"을 생성하도록 헬퍼를 재정의하고 싶습니다. 보기 도우미에서이 작업을 수행 할 수 있지만 라우팅 수준에서 재정의 할 수있는 방법이 있습니까?레일즈 오버라이드 기본 라우팅 도우미

답변

3

의 범위를해야합니다. 반환 값은 생성 된 URL에서 ID로 사용됩니다.

class Thing 
    def to_param 
    name 
    end 
end 

다음은 또한 너무

scope "/something" do 
    resources :things 
end 

같은 범위에 자원을 당신의 경로를 적용 할 수 있습니다, 당신은 또한 하위 자원을 적용 할 수있다 사용할 수 있습니다.

마지막으로 컨트롤러를 적용해야합니다. Thing.find(params[:id])은 분명히 작동하지 않습니다.

class ThingsController < ApplicationController 
    def show 
    @thing = Thing.where(:name => params[:id).first 
    end 
end 

당신은 아마 그렇지 않은 경우 당신이 이상한 일들을 관찰 할로 Thingname이 고유 있는지 확인하려면.

당신은 또한

+0

Nice! 정확히 내가 뭘 찾고 있었는지 - 고마워! – tpalmer

0

당신은 당신은 당신의 모델에 to_param를 정의 할 수 있습니다 routes.rb

scope "/something" do 
    resources :models 
end 
+0

그래 (생성 슬러그를 사용하는 예) 당신이 몇 가지 추가 동작을 제공하는 friendly_id에 관심이있을 수있는, 자신이 모든 것을 구현에서 번거 로움을 저장하려면,하지만 난 ID를 싶지 않아 해당 경로를 추가하지 않으면 "/something/model/[model.id]"와 같은 경로가 생성됩니까? 내가 대신에 "/something/[model.name]"처럼 보일 필요가 있습니다. – tpalmer

+0

좋아요. 그래서 평상시에는 안되는 경로가 필요합니다. – MikDiet

+1

'get "something/: name"=> "models # show", : as => : model' – MikDiet

관련 문제