2013-03-25 6 views
0

테스트 애플리케이션에서 레일즈 4를 사용하고 있습니다. URL 형식이 resources :foo 인 표준이 아닌 임의의 URL이 있습니다.레일 4의 명명 된 경로

: 다음 명명 된 도우미 등을 사용하여 링크를 설정할 수있는 경우 뷰에서

/contests/:id/enter

, 그것은 좋은 것 : 이상적으로 원하는 최종 결과에 갈 수있을 것입니다 edit_contests_enter(:id)?

위와 같은 임의의 URL로 도우미 경로를 사용할 수 있도록 위의 경로를 정의하는 가장 좋은 방법은 무엇입니까? 그것은 반드시 edit_contests_enter(:id) 일 필요는 없지만 위의 제안대로 헬퍼 경로가 URL로 이어지는 한 환상적입니다.

답변

3

귀하의 컨테스트가 리소스라고 가정하고 방문자가 /contests/:id/enter으로 갈 때 user <=> contest 개체를 생성하기를 원합니다. participation이라고합시다.

지금 participation는 정확히 레일 응용 프로그램의 다른 자원처럼, 그래서 당신은

resources :contests do 
    resources :participations 
end 

처럼 찾고 routes.rb 파일이있을 것이다 당신은 참여를 만드는 것보다 사람들이 같은 다른 아무것도하고 싶지 않아 그들을 편집하거나 파괴하십시오. 아마도 /contests/:id/enter과 같은 멋진 URI를 원할 것입니다. 당신이 할 수있는 일은 이렇게

resources :contests do 
    resources :participations, :only => [:new, :create] 
    get "enter" => "participations#new" 
end 

당신에게 contest_enter라는 이름의 루트 도우미를 줄 것 같은. participations#new 양식의 경우 일 때 평소와 마찬가지로 /contests/:id/participations이됩니다.

2

당신이 :contests에 대한 resources 블록이있는 경우, 당신은 그냥 사용 ContestsController에 새로운 "회원"경로를 정의 할 수 있습니다 :

resources :contests do 
    member do 
    get :enter 
    end 
end 

을 그리고 자동으로 당신에게 이름 member route의 이름을 생성 할 당신 rake routes을 실행하여 찾을 수 있습니다.