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.

Jared Carroll

Pair with one of our expert developers to level up your skills with Coaching by thoughtbot. Save time learning best practices and techniques for reducing technical debt in Ember, Ruby, Haskell, and Go in 1-on-1 sessions tailored to your goals.