2012-01-07 1 views
1

ID 용 슬러그를 사용하므로/artists/radiohead/songs/karma-police 대신/songs/radiohead/karma-police와 같은 URL을 원합니다.중첩 된 리소스 경로에서 두 번째 모델 이름 삭제

굼벵이는 달성 할 수 있습니다

def to_param 
    slug 
end 

하지만 어떻게 모델 이름 드롭 할 수있는 방법이있다 - 표준의 RESTful URL에서 - "노래는?"

+0

가능한 중복 http://stackoverflow.com/questions/182040/default-segment-name-in -rails-resources-routing) – edgerunner

+0

검색 할 때 그것을 보지 못했지만 이름을 유지하고 두 번째를 삭제하는 것과 충분히 다른 것으로 생각합니다. 반면 그 질문은 반대입니다. 중첩 된 라우팅은 까다로운 일이므로 별도의 질문을 유용한 리소스로 만드는 데는 별개의 문제입니다. 차이점을 반영하여 제목을 업데이트하겠습니다. – mahemoff

+0

Rails 3.1에서이 기능을 확인했습니다. 질문 : 자원, 노래, : 경로 => ''로 대답 할 수 있다면 받아 들일 것입니다. – mahemoff

답변

1

을 확인하십시오.

resources :songs, path: "songs/:artist_id" 

이이 노선을 생성합니다

 songs GET /songs/:artist_id(.:format)   {:action=>"index", :controller=>"songs"} 
      POST /songs/:artist_id(.:format)   {:action=>"create", :controller=>"songs"} 
    new_song GET /songs/:artist_id/new(.:format)  {:action=>"new", :controller=>"songs"} 
    edit_song GET /songs/:artist_id/:id/edit(.:format) {:action=>"edit", :controller=>"songs"} 
     song GET /songs/:artist_id/:id(.:format)  {:action=>"show", :controller=>"songs"} 
      PUT /songs/:artist_id/:id(.:format)  {:action=>"update", :controller=>"songs"} 
      DELETE /songs/:artist_id/:id(.:format)  {:action=>"destroy", :controller=>"songs"} 
[레일 자원 라우팅의 기본 세그먼트 이름] (의
+0

실제로 더 나은 것 :). 감사. 다른 누군가가 궁금해하는 경우, 여기에있는 경로 선언은 중첩되지 않습니다. 이것을 별도의 경로로 선언하십시오. – mahemoff

0

이것을 routes.rb에 넣으면 제대로 작동합니다. 당신이 :as을 할 경우

match 'artists/:artist_id/:id' => 'songs#show', :as => 'artist_song' 

는 다른 경로가이 일에 우선하지 않도록해야합니다.

그런 다음 당신은 당신의 resources 통화에 :path 옵션을 전달하여 경로 세그먼트를 대체 할 수 있습니다이 Routing match reference

+0

고마워, 나는 이런 식으로 URL을 생성 할 수 없었다. 즉 artist_song_url은 여전히 ​​두 모델 이름을 생성합니다. – mahemoff

+0

@edgerunner와 연결된 또 다른 질문은 더 나은 대답입니다. 그것을 밖으로 검사하십시오 – Azolo