I''ve a Course model in my application and so my routes file contains the standard: map.resources :courses and then of course: map.connect '':controller/:action/:id.:format'' map.connect '':controller/:action/:id'' URLs like "www.example.com/courses/1;edit" and "www.example.com/ courses/edit/1" work fine, but when I use something like this "www.example.com/courses/edit?id=1" it doesn''t work. The "show" action is called instead of "edit". Removing map.resources line fixes it of course, but I was wondering if there''s a way to have the cake and eat it too? I need the "www.example.com/courses/edit?id=1" format to be able to send a GET request through a form with a select_tag setting an id. So I''d like to do something like this: Edit course <% form_for(:course, :url => {:controller => ''courses'', :action => ''edit''}, :html => { :method => :get }) do |f| %> <%= select_tag ''id'', options_from_collection_for_select(Course.find(:all), ''id'', ''name_and_dates'') %> <%= submit_tag ''Go!'' %> <% end -%> So, alternatively, is there any other way to do this (and make it degradable to non-JS browsers)? Thanks, Maciek -- 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 -~----------~----~----~----~------~----~------~--~---
On 3/14/07, Maciek <rails-mailing-list-ARtvInVfO7ksV2N9l4h3zg@public.gmane.org> wrote:> > I''ve a Course model in my application and so my routes file contains > the standard: > > map.resources :courses > > and then of course: > > map.connect '':controller/:action/:id.:format'' > map.connect '':controller/:action/:id'' > > URLs like "www.example.com/courses/1;edit" and "www.example.com/ > courses/edit/1" work fine, but when I use something like this > "www.example.com/courses/edit?id=1" it doesn''t work. The "show" action > is called instead of "edit". Removing map.resources line fixes it of > course, but I was wondering if there''s a way to have the cake and eat > it too? > > I need the "www.example.com/courses/edit?id=1" format to be able to > send a GET request through a form with a select_tag setting an id. So > I''d like to do something like this:Routes match top to bottom. By putting map.resources above the generic resource route, it matches /courses/edit as /courses/:id. Try this: map.connect '':controller/:action/:id'', :action => /[a-z]+/, :id => nil # matches /foo/list or /foo/show/1 map.resources ... .... -- Rick Olson http://lighthouseapp.com http://weblog.techno-weenie.net http://mephistoblog.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 -~----------~----~----~----~------~----~------~--~---
Hey, Personally, and assuming this is an isolated case for you, I''d avoid tinkering with routes like Rick suggests. In your routes.rb: map.resources :courses, :collection => {:edit_for => :get} In courses_controller.rb: def edit_for # personally, I''d just do redirect_to(edit_course_path(params[:id])) # but if the extra round-trip offends you... edit render :action => :edit end And finally your url helper looks like this: edit_for_courses_path(:id => 23) #=> /courses;edit_for?id=23 which is recognized by rails routing, even if you remove the default routes from routes.rb HTH, Trevor On 14-Mar-07, at 5:17 PM, Rick Olson wrote:> > On 3/14/07, Maciek <rails-mailing-list-ARtvInVfO7ksV2N9l4h3zg@public.gmane.org> wrote: >> >> I''ve a Course model in my application and so my routes file contains >> the standard: >> >> map.resources :courses >> >> and then of course: >> >> map.connect '':controller/:action/:id.:format'' >> map.connect '':controller/:action/:id'' >> >> URLs like "www.example.com/courses/1;edit" and "www.example.com/ >> courses/edit/1" work fine, but when I use something like this >> "www.example.com/courses/edit?id=1" it doesn''t work. The "show" >> action >> is called instead of "edit". Removing map.resources line fixes it of >> course, but I was wondering if there''s a way to have the cake and eat >> it too? >> >> I need the "www.example.com/courses/edit?id=1" format to be able to >> send a GET request through a form with a select_tag setting an id. So >> I''d like to do something like this: > > Routes match top to bottom. By putting map.resources above the > generic resource route, it matches /courses/edit as /courses/:id. Try > this: > > map.connect '':controller/:action/:id'', :action => /[a-z]+/, :id => nil > # matches /foo/list or /foo/show/1 > map.resources ... > .... > > -- > Rick Olson > http://lighthouseapp.com > http://weblog.techno-weenie.net > http://mephistoblog.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 -~----------~----~----~----~------~----~------~--~---
Rick Olson wrote:> > map.connect '':controller/:action/:id'', :action => /[a-z]+/, :id => nil > # matches /foo/list or /foo/show/1 > map.resources ...Thanks Rick. I added _ to the pattern for some actions to work, but this works pefectly. Trevor, Do you think doing this that way might get me into trouble later? Are there any particular risks? Thanks, Maciek. -- 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 -~----------~----~----~----~------~----~------~--~---
Heh. Isn''t map.resources :courses, :collection => {:edit_for => :get} still tinkering with routes? ;) RSL On 3/14/07, Trevor Squires <trevor-k8q5a0yEZAgS+FvcfC7Uqw@public.gmane.org> wrote:> > > Hey, > > Personally, and assuming this is an isolated case for you, I''d avoid > tinkering with routes like Rick suggests. > > In your routes.rb: > > map.resources :courses, :collection => {:edit_for => :get} > > In courses_controller.rb: > > def edit_for > # personally, I''d just do redirect_to(edit_course_path(params[:id])) > # but if the extra round-trip offends you... > edit > render :action => :edit > end > > And finally your url helper looks like this: > > edit_for_courses_path(:id => 23) #=> /courses;edit_for?id=23 > > which is recognized by rails routing, even if you remove the default > routes from routes.rb > > HTH, > Trevor > > On 14-Mar-07, at 5:17 PM, Rick Olson wrote: > > > > > On 3/14/07, Maciek <rails-mailing-list-ARtvInVfO7ksV2N9l4h3zg@public.gmane.org> wrote: > >> > >> I''ve a Course model in my application and so my routes file contains > >> the standard: > >> > >> map.resources :courses > >> > >> and then of course: > >> > >> map.connect '':controller/:action/:id.:format'' > >> map.connect '':controller/:action/:id'' > >> > >> URLs like "www.example.com/courses/1;edit" and "www.example.com/ > >> courses/edit/1" work fine, but when I use something like this > >> "www.example.com/courses/edit?id=1" it doesn''t work. The "show" > >> action > >> is called instead of "edit". Removing map.resources line fixes it of > >> course, but I was wondering if there''s a way to have the cake and eat > >> it too? > >> > >> I need the "www.example.com/courses/edit?id=1" format to be able to > >> send a GET request through a form with a select_tag setting an id. So > >> I''d like to do something like this: > > > > Routes match top to bottom. By putting map.resources above the > > generic resource route, it matches /courses/edit as /courses/:id. Try > > this: > > > > map.connect '':controller/:action/:id'', :action => /[a-z]+/, :id => nil > > # matches /foo/list or /foo/show/1 > > map.resources ... > > .... > > > > -- > > Rick Olson > > http://lighthouseapp.com > > http://weblog.techno-weenie.net > > http://mephistoblog.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 -~----------~----~----~----~------~----~------~--~---
Hey again, as I said, "assuming this is an isolated case for you", as in, if you just wanted the behavior for a particular controller and action then I''d deal with that specific issue rather than change route recognition order. The fact that you had to add ''_'' to the pattern indicates that you had more than just the ''edit'' action in mind so it''s probably not an isolated case. There''s nothing that''s specifically going to get you into trouble later, there are plenty of pre1.2 rails apps out there that use the default route just fine. My personal experience has been that things are easier to control if I don''t mix resources style urls with the default route - so lately I''ve been *deleting* the default route on my new projects and only using resources and named routes. However, if Rick''s suggestion works for you and it doesn''t have any side effects that you don''t like, then you''re done :-) Regards, Trevor On 15-Mar-07, at 4:04 AM, Maciek wrote:> > Rick Olson wrote: >> >> map.connect '':controller/:action/:id'', :action => /[a-z]+/, :id => >> nil >> # matches /foo/list or /foo/show/1 >> map.resources ... > > Thanks Rick. I added _ to the pattern for some actions to work, but > this > works pefectly. > > Trevor, > > Do you think doing this that way might get me into trouble later? Are > there any particular risks? > > Thanks, > Maciek. > > -- > 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 -~----------~----~----~----~------~----~------~--~---
> My personal experience has been that things are easier to control if > I don''t mix resources style urls with the default route - so lately > I''ve been *deleting* the default route on my new projects and only > using resources and named routes.I do this too to keep things consistent. However, sometimes I''m a stickler for routes and I have custom routes on top of my resource routes. It really depends on what I''m trying to do. If in doubt, set up some good routing tests using assert_routing. -- Rick Olson http://lighthouseapp.com http://weblog.techno-weenie.net http://mephistoblog.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 -~----------~----~----~----~------~----~------~--~---