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.
--
Posted via http://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-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org
To unsubscribe from this group, send email to
rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org
For more options, visit this group at
http://groups.google.com/group/rubyonrails-talk?hl=en
-~----------~----~----~----~------~----~------~--~---
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 via http://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-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
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...-ARtvInVfO7ksV2N9l4h3zg@public.gmane.org> 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-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe@googlegroups.com For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---