I''ve created patch which adds support for specifying a subset of named routes to create when mapping verb-oriented controllers for collections of resources (see http://rails.lighthouseapp.com/projects/8994-ruby-on-rails/tickets/838). You can specify which routes to add using :only and/or :except options with array values containing symbols of :collection, :new, :member and :associations. This is especially useful for creating nested routes, so that the redundant parent ids are not required for routes containing explicit ids. For example... map.resources :posts do |post| post.resources :comments, :only => [ :collection, :new ] end map.resources :comments, :except => [ :collection, :new ] The generated routes would nest the collection and new record routes for comment resources within posts... e.g. GET /posts/1/comments or POST /posts/1/comments However, the routes with explicit ids would not require the post_id... e.g. GET /comments/2 instead of GET /posts/1/comments/2 This really helps to clean up urls when nesting resources more than once. For example, instead of: map.resources :projects do |project| project.resources :milestones do |milestone| milestone.resources :features do |feature| feature.resources :tasks end end end You could use: map.resources :projects do |project| project.resources :milestones, :only => [ :collection, :new ] end map.resources :milestones, :except => [ :collection, :new ] do | milestone| milestone.resources :features, :only => [ :collection, :new ] end map.resources :features, :except => [ :collection, :new ] do | feature| feature.resources :tasks, :only =>[ :collection, :new ] end map.resouces :tasks, :except => [ :collection, :new ] This would result in the ability to simply access: /features/72/tasks Instead of: /projects/13/milestones/16/features/72/tasks --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Core" group. To post to this group, send email to rubyonrails-core@googlegroups.com To unsubscribe from this group, send email to rubyonrails-core+unsubscribe@googlegroups.com For more options, visit this group at http://groups.google.com/group/rubyonrails-core?hl=en -~----------~----~----~----~------~----~------~--~---
> For example... > > map.resources :posts do |post| > post.resources :comments, :only => [ :collection, :new ] > end > map.resources :comments, :except => [ :collection, :new ]I don''t see how this is necessary? Even without :only and :except, you''ll still get what you want. Just by mapping comments inside posts and outside, you''ll get routes for both /comments and /post/1/comments defined. And you''ll be free to access whichever you need for the case in point. Even the generating routes are disambiguated with post_comment_url and comment_url. So I don''t see how this adds anything except slightly cut down on the number of routes. But that doesn''t seem worth the API overhead of adding :only/:except to me. --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Core" group. To post to this group, send email to rubyonrails-core@googlegroups.com To unsubscribe from this group, send email to rubyonrails-core+unsubscribe@googlegroups.com For more options, visit this group at http://groups.google.com/group/rubyonrails-core?hl=en -~----------~----~----~----~------~----~------~--~---
Thanks for the feedback David.> So I don''t see how this adds anything except slightly cut down on the > number of routes. But that doesn''t seem worth the API overhead of > adding :only/:except to me.Yeah, I didn''t like the API overhead of :only/:except, but it was all that made sense to me at the time... upon further reflection this his led to an alternate proposal in the lighthouse ticket (http:// rails.lighthouseapp.com/projects/8994-ruby-on-rails/tickets/838)... map.resources :posts, :shallow => true do |post| post.resources :comments end See the ticket for more complete example and the preceding discussion. Cheers. --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Core" group. To post to this group, send email to rubyonrails-core@googlegroups.com To unsubscribe from this group, send email to rubyonrails-core+unsubscribe@googlegroups.com For more options, visit this group at http://groups.google.com/group/rubyonrails-core?hl=en -~----------~----~----~----~------~----~------~--~---
> Yeah, I didn''t like the API overhead of :only/:except, but it was all > that made sense to me at the time... upon further reflection this his > led to an alternate proposal in the lighthouse ticket (http:// > rails.lighthouseapp.com/projects/8994-ruby-on-rails/tickets/838)... > > map.resources :posts, :shallow => true do |post| > post.resources :comments > end > > See the ticket for more complete example and the preceding discussion.Shallow is a great way of describing it. Neat encapsulation of the pattern. How does the named routes look, though? I take you''d get post_comments_url(post) and comment_url(comment), right? --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Core" group. To post to this group, send email to rubyonrails-core@googlegroups.com To unsubscribe from this group, send email to rubyonrails-core+unsubscribe@googlegroups.com For more options, visit this group at http://groups.google.com/group/rubyonrails-core?hl=en -~----------~----~----~----~------~----~------~--~---
> Shallow is a great way of describing it. Neat encapsulation of the > pattern. How does the named routes look, though? I take you''d get > post_comments_url(post) and comment_url(comment), right?Thanks. Yes, that''s exactly right for the named routes. --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Core" group. To post to this group, send email to rubyonrails-core@googlegroups.com To unsubscribe from this group, send email to rubyonrails-core+unsubscribe@googlegroups.com For more options, visit this group at http://groups.google.com/group/rubyonrails-core?hl=en -~----------~----~----~----~------~----~------~--~---