Reputation: 48490
I'm trying to do something trivial. I have a bunch of URLs that I need to map like the following:
http://example.com/foo
http://example.com/foo/something
Both need to go to the same controller/action. The problem I'm having is when http://example.com/foo
is invoked, I need to specify a default query parameter. I thought that's what the :defaults hash does in routes.rb, but unfortunately the following doesn't work:
map.connect 'foo', :controller => 'something', :action => 'anaction',
:defaults => { :myparam => 'foobar' }
This should route http://example.com/foo
to the something controller, anaction action, and make params[:myparam] point to the string "foobar".
I'm assuming for the second example http://example.com/foo/something
, I'll need an additional route.
What's the best way to tackle this?
Upvotes: 0
Views: 1367
Reputation: 6840
I wouldn't complicate things by adding such logic to my routes file, I'd just do it in my action:
params[:my_param] ||= 'foobar'
Upvotes: 3
Reputation: 85812
Untested, but:
map.connect 'foo', :controller => 'something', :action => 'anaction', :myparam => 'foobar'
It looks like the :controller
and :action
arguments in there are not in any way special, but just end up feeding into params
. The 2.3.8 documentation seems to confirm this.
More formally, you can include arbitrary parameters in the route, thus:
map.connect ':controller/:action/:id', :action => 'show', :page => 'Dashboard'
This will pass the :page parameter to all incoming requests that match this route.
Upvotes: 2