Hi Carlos! Because of the nesting. For example, I recently hacked up a version of Beast which is nested similarly to yours: Forums with many Topics with many Posts. Creating a new post has the following resource path: / forums/:forum_id/topics/:topic_id/posts/new Even though the topic_id in my case is globally unique, it still needs the forum_id for that path.
You don't have to do that, though. You could leave them as non-nested and then just use associations, i.e. Topics has_many Items I like nested resources conceptually but they do make url generation a little confusing. Just remember to use: "rake routes" liberally so that you always know what routes are available and how to map them. :-) -Danimal On Mar 31, 12:27 am, Carlos Santana <rails-mailing-l...@andreas-s.net> wrote: > Carlos Santana wrote: > > I am using nested resources as follows: > > map.resources :topics do |topics| > > topics.resources :items do |items| > > items.resources :attachments > > end > > end > > > When I generate a RESTful path for new item in the console: > > app.new_topic_item_path(2) then I get correct path as > > '/topics/2/items/new'. > > > However, for the new attachment I am getting error: > > app.new_topic_item_attachment_path(22) gives - > > ActionController::RoutingError: new_topic_item_attachment_url failed to > > generate from {:action=>"new", :controller=>"attachments", > > :topic_id=>22}, expected: {:controller=>"attachments", :action=>"new"}, > > diff: {:topic_id=>22} > > > from > > /usr/lib/ruby/gems/1.8/gems/actionpack-2.1.0/lib/action_controller/routing/route_set.rb:375:in > > `raise_named_route_error' > > from > > /usr/lib/ruby/gems/1.8/gems/actionpack-2.1.0/lib/action_controller/routing/route_set.rb:339:in > > `generate' > > from > > /usr/lib/ruby/gems/1.8/gems/actionpack-2.1.0/lib/action_controller/url_rewriter.rb:131:in > > `rewrite_path' > > from > > /usr/lib/ruby/gems/1.8/gems/actionpack-2.1.0/lib/action_controller/url_rewriter.rb:110:in > > `rewrite_url' > > from > > /usr/lib/ruby/gems/1.8/gems/actionpack-2.1.0/lib/action_controller/url_rewriter.rb:88:in > > `rewrite' > > from > > /usr/lib/ruby/gems/1.8/gems/actionpack-2.1.0/lib/action_controller/integration.rb:218:in > > `url_for' > > from (eval):17:in `new_topic_item_attachment_path' > > from (irb):5. > > > - - - - - > > > Why is it failing and how to fix this? > > And, why is it generating '{:action=>"new", :controller=>"attachments", > > :topic_id=>22}' ? Shouldn't it pass item_id rather than topic_id? > > > Any clues? > > > - > > Thanks, > > CS. > > Figured it out: > I did new_topic_item_attachment_path and got an error: > ''ActionController::RoutingError: new_agenda_item_attachment_url failed > to generate from {:action=>"new", :controller=>"attachments"} - you may > have ambiguous routes, or you may need to supply additional parameters > for this route. content_url has the following required parameters: > ["agendas", :agenda_id, "items", :item_id, "attachments", "new"] - are > they all satisfied?'' > > So I need to pass both topic and item id. But isn't item associated with > the topic resource? Why do I need to pass both ids? > > -- > Posted viahttp://www.ruby-forum.com/. --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk@googlegroups.com To unsubscribe from this group, send email to rubyonrails-talk+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---