2011-08-10 5 views
1

사용자와 팀 (has_many : through 등)간에 다 대다 관계가 있으며 "팀 구성원"조인 모델을 리소스로 조인하려고합니다. 노선.Rails 3 조인 모델의 리소스 라우팅

내 레이아웃에서 current_team에 대한 세션 변수를 설정하는 "팀 컨텍스트 양식"을 설정했으며 team_members 리소스의 경로를 /team_members/:user_id/show으로 정의하고 싶습니다. routes.rb에서 resources :team_members으로 이것을 수행 할 수있는 방법이 있습니까?

내가 요구하는 행동에 대한 그러나, :path_names => {:action => "\some\url"}를 사용하여 시도했다 : 당신은 팀 구성원을 편집 할 수있게하려면 , 당신은 할 수 : 라우터가 경로 "\:id\some\url"

답변

1

편집과 같은 것으로 추가 ID를 회원 =>/users/:user_id/team_members/:id/edit

을 편집 한 후

resources :users do 
    resources :team_members 
end 

과를 가지고 그리고 당신은 당신이 team_members_controller에서 원하는 무엇이든 할 수 있습니다.

또는 숫자가 1111407 인 경우에만 resources :team_members이라고 말하면 팀 멤버십과 함께 사용할 수있는 모든 나머지 길을 갖게됩니다.


정말 표준을 원하지 않습니까? /teams/:team_id/users/:id?

당신은 정말 /team_members/:user_id/show 당신은 단지

get "/team_members/:id/show" => "users#show" 

할 수 싶어하지만 그것은 좋은 생각 해달라고합니다.

+0

"users # show"와 "users # edit"는 실제로 내가 원하는 경로와보기와 실제로 다릅니다.사용자가 팀에 속한 팀 컨텍스트를 기반으로 편집 및 표시하고 해당 팀 구성원으로 권한 상태를 변경할 수 있기를 원합니다. 퍼미션은'team_member' 모델의 일부로 정의되었으므로 필자는 근본적으로 한 문자열을'current_team'의 관리자로 변경할 수 있어야합니다. 네임 스페이스의 일부로 경로를 개별적으로 설정하는 것 이외에 다른 방법을 찾지 못했습니다. – incomethax

+0

이렇게하면 team_member (멤버십)가 고유 한 리소스로 취급되고 모든 경로 합병증을 제거하는 id에 의해 참조되어야한다는 인수가 강화됩니다. 또한 사용자와 팀 모두에서 멤버쉽 리소스를 단독으로 중첩 할 수 있습니다. /memberships/: id, /users/: user_id/membershiphips/: id, /teams/: team_id/membershiphips/: id – numbers1311407

+0

기본적으로 맞습니까? 그가 조인 모델을 설정하면 자동으로 ID를 갖습니다. 편집 : 죄송합니다, 귀하의 게시물에 대한 자신의 코멘트를 보지 못했습니다 :) – Robin

0

관계가 many-to-many 인 경우이 표시 페이지가 사용자가 속한 모든 팀을 표시하기위한 것이 아닌 이상 작성하려는 경로가 팀을 참조하지 않습니다.

ID를 조인 모델에 할당하고 자연스럽게 GET 경로를 사용하면이 기능이 기본적으로 작동합니다./team_memberships/: id

편집 : 죄송합니다. 제 2 단락을주의 깊게 읽지 않았습니다. (다른 사람이 제안한 것처럼) 세션에서 팀을 저장하는 경우 team_members를 싱글 톤 리소스로 설정하고 팀을 회원이 될 때 세션에서.

그러나 앱에서 작동하는 경우 team_membership을 자체 리소스로 간주하는 것이 자연스럽게 RESTful 일 수 있습니다. ID와 당신이 당신의 current_team 세션 변수를 사용하여 팀을 찾아 볼 수 있도록합니다 :

resource :team_members do 
    resources :users 
end 

은 "자원"명령이 팀이 어떤을지지 않습니다 경로를 만듭니다 당신이 찾고있는 것은 경우

+0

이전에 내가 habtm을 사용하려고했던 것처럼 나는 이주에서'id => false'를 설정했습니다. – incomethax

0

이 궁금해 .

당신은 앱에서 이러한 경로를 얻을 것 : 각각의 경우에

/team_members   # team_members#show 
/team_members/users  # users#index 
/team_members/users/:id # users#show 

당신이 current_team를보고 할 책임이 있습니다.