2

サブリソースが独自に存在しないネストされたリソースを作成しようとしています。たとえば、 にAddressリンクされているリソースPerson

私のルート宣言は次のようになります。

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
4

1 に答える 1

2

これはあなたがやろうとしていることですか?

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

これにより、ネストされた人物のリソースとしてアドレスが作成されますが、インデックス ビューとショー ビューのみが使用可能になります。

于 2010-07-14T21:00:06.550 に答える