====== Caching Nested Forms ======
Normally, using a nested resource's url leads you to the controller of the "embedded" resource. E.g:
map.resources :guests, :has_many => :registrations
Produces:
guest_registrations GET /guests/:guest_id/registrations(.:format) {:controller=>"registrations", :action=>"index"}
POST /guests/:guest_id/registrations(.:format) {:controller=>"registrations", :action=>"create"}
new_guest_registration GET /guests/:guest_id/registrations/new(.:format) {:controller=>"registrations", :action=>"new"}
edit_guest_registration GET /guests/:guest_id/registrations/:id/edit(.:format) {:controller=>"registrations", :action=>"edit"}
guest_registration GET /guests/:guest_id/registrations/:id(.:format) {:controller=>"registrations", :action=>"show"}
PUT /guests/:guest_id/registrations/:id(.:format) {:controller=>"registrations", :action=>"update"}
DELETE /guests/:guest_id/registrations/:id(.:format) {:controller=>"registrations", :action=>"destroy"}
(You can output this yourself using ''rake routes'')
This is obviously bad if you want to use nested **forms**, where you need the controller to be the one for the parent object. In a nested form, the CRUD (Create, Read, Update, Delete) actions on the nested model are automatically handled for you, so there's no real need to access the nested model's controller.
map.resources :guests do |guest|
guest.resources :registrations, :path_prefix => ':locale/guests/:guest_id', :controller => :guests
end
This produces:
guest_registrations GET /guests/:guest_id/registrations(.:format) {:controller=>"guests", :action=>"index"}
POST /guests/:guest_id/registrations(.:format) {:controller=>"guests", :action=>"create"}
new_guest_registration GET /guests/:guest_id/registrations/new(.:format) {:controller=>"guests", :action=>"new"}
edit_guest_registration GET /guests/:guest_id/registrations/:id/edit(.:format) {:controller=>"guests", :action=>"edit"}
guest_registration GET /guests/:guest_id/registrations/:id(.:format) {:controller=>"guests", :action=>"show"}
PUT /guests/:guest_id/registrations/:id(.:format) {:controller=>"guests", :action=>"update"}
DELETE /guests/:guest_id/registrations/:id(.:format) {:controller=>"guests", :action=>"destroy"}
Now to be sure, following the example above you'll have to make distinction in your controller between cases where the registration id is known (all operations are on a specific registration), and where it is not (all operations pertain to a guest object). But you'd have to do that too if you were using a custom made "selected_registration_id".
TO DO: include info on nested resources (routing)
[[http://adamblog.heroku.com/past/2007/12/20/nested_resources_in_rails_2/|Nested Resources in Rails 2]]