map.root doesn't run controller logic?

I have this in my routes.rb:

map.resources :events # ... map.root :controller => "events", :action => :index

Surely enough, accessing http://localhost:3000/ renders the events/index.html.erb template. However, accessing http://localhost:3000/events renders the same page/template slightly different, as the controller logic (EventsController#index) loads some objects that's not available at "/". Apparently the root route doesn't run the controller logic at all - it only renders the template.

Is there something wrong here, or am I the one with wrong expectations? How can I fix it?

Try to change the mapping to:

map.root :controller => "events", :action => "index"

The root route does run the controller logic, maybe there is something mistyped in your routes.rb file.

Yup, specifying the action as a string fixed it. Strange that the action name as symbol mapping would find the right template, but not the right controller action. Oh, well, guess I'm not supposed to do that anyway :slight_smile:

I find this very strange actually…

what version of rails u r on??

what happens if u just specified the controller in the mapping (with no action at all)… the index is the default action anyway…

try map.root :controller => “events”

mahmoud said wrote:

I find this very strange actually...

what version of rails u r on??

2.1

what happens if u just specified the controller in the mapping (with no action at all).. the index is the default action anyway..

That also works. Guess we all learned somthing new then :slight_smile: