rails 2 point oh jesus

Jared Carroll

So I’ve been gradually getting my feet wet with the new Rails 2.0 release.

Then I ran into the changes to ActionController::Resources#resource:

A singular name is given to map.resource. The default controller name is still taken from the plural name.

This means that if you have the following in your routes.rb.

ActionController::Routing::Routes.draw do |map|

  map.resource :session

end

Rails is going to look for a SessionsController not a SessionController. So even though you’re using the singular version, #resource, Rails is expecting a plural controller name.

This is terrible. I just recently discovered the beauty of #resource and singleton controllers and now Rails 2.0 assumes that all singleton resources map to plural named controllers.

One of my favorite idioms was to use a singular resource for allowing users to edit their password (I always put password editing on a page separate from editing the rest of a user’s info, try keeping password changes along side your other user info changes and see how ugly your code gets. A separate controller cleans things up nice and allows you stay with CRUD naming for all your actions).

ActionController::Routing::Routes.draw do |map|

  map.resources :users do |user|
    user.resource :password
  end

end

Goes from

class UsersController < ApplicationController
end

class PasswordController < ApplicationController
end

to

class UsersController < ApplicationController
end

class PasswordsController < ApplicationController
end

What trash.

I’ve refused to accept this new singular resource plural controller name style and have resorted to specifying controller names in my routes.rb file.

ActionController::Routing::Routes.draw do |map|

  map.resources :users do |user|
    user.resource :password, :controller => 'password'
  end

end

Now I have to use this ugly hash of parameters to my #resource call (also Rails when are you going to let me use symbols for controller names? Strings are hideous and break up the flow of my code).

I might have to patch Rails or at least say I will and not do anything.

We've been helping engineering teams deliver exceptional products for over 20 years. Our designers, developers, and product managers work closely with teams to solve your toughest software challenges through collaborative design and development. Learn more about us.