2010-07-14 4 views
2

하위 리소스에 자체 리소스가없는 중첩 리소스를 만들려고합니다. 예 : Address 리소스는 Person에 연결됩니다. 이것은 다음과 같은 경로 나에게 제공Rails에서 중첩 된 리소스로 경로 제한

map.resources :persons, 
:has_many => :addresses 

:과 같이

내 경로 선언 보인다

   person_addresses GET /persons/:person_id/addresses     {:controller=>"addresses", :action=>"index"} 
    formatted_person_addresses GET /persons/:person_id/addresses.:format   {:controller=>"addresses", :action=>"index"} 
           POST /persons/:person_id/addresses     {:controller=>"addresses", :action=>"create"} 
           POST /persons/:person_id/addresses.:format   {:controller=>"addresses", :action=>"create"} 
      new_person_address GET /persons/:person_id/addresses/new    {:controller=>"addresses", :action=>"new"} 
formatted_new_person_address GET /persons/:person_id/addresses/new.:format  {:controller=>"addresses", :action=>"new"} 
      edit_person_address GET /persons/:person_id/addresses/:id/edit   {:controller=>"addresses", :action=>"edit"} 
formatted_edit_person_address GET /persons/:person_id/addresses/:id/edit.:format {:controller=>"addresses", :action=>"edit"} 
       person_address GET /persons/:person_id/addresses/:id    {:controller=>"addresses", :action=>"show"} 
    formatted_person_address GET /persons/:person_id/addresses/:id.:format  {:controller=>"addresses", :action=>"show"} 
           PUT /persons/:person_id/addresses/:id    {:controller=>"addresses", :action=>"update"} 
           PUT /persons/:person_id/addresses/:id.:format  {:controller=>"addresses", :action=>"update"} 
           DELETE /persons/:person_id/addresses/:id    {:controller=>"addresses", :action=>"destroy"} 
           DELETE /persons/:person_id/addresses/:id.:format  {:controller=>"addresses", :action=>"destroy"} 

지금 나는 확실히 사람의 주소는 읽기 전용되는, 즉 만들고 싶어, 나는 주소에 대해 showindex 작업 만 필요합니다.

나는이 시도 :

map.resources :persons, 
    :has_many => :addresses, 
    :collection => { :addresses => [ :show, :index ] } 

을이 오류 가지고 :

(in /home/rmk/app) 
rake aborted! 
Invalid HTTP method specified in route conditions: {:method=>:show} 

(See full trace by running task with --trace) 

내가 이것을 달성 할 수있는 방법이 있나요를?

편집 : 내 주된 문제는 코드 블록을 제대로 사용하지 못했다는 것입니다 (가능한 한 has_one 등을 사용하고 싶었습니다). 그래서 내 persons 노선이 (다소 인위적인 예) 같이 :

map.resources :persons, :has_one => :ssn, :except => [:new, :edit] do |person| 
person.resources :addresses, :only => [:index, :show] 
end 

답변

2

이 당신이 뭘 하려는지인가?

map.resources :persons do |person| 
    person.resources :addresses, :only => [:index, :show] 
end 

이렇게하면 주소가 사람의 중첩 된 자원으로 생성되지만 색인 및 쇼보기 만 사용할 수있게됩니다.

+0

굉장합니다, 칼, 감사합니다. 위의 편집에서 설명했듯이 코드 블록을 제대로 사용하지 않았습니다 (hashone, has_many 등을 사용하는 사람이 다른 제약 조건을 지정하고 싶었을 때만 필요할 때만 코드 블록에 의존했습니다). – rmk

관련 문제