Extract from the 
http://guides.rubyonrails.org/routing.html#singular-resources documentation:

Because you might want to use the same controller for a singular route 
> (/account) and a plural route (/accounts/45), singular resources map to 
> plural controllers. So that, for example, resource :photo and resources 
> :photos creates both singular and plural routes that map to the same 
> controller (PhotosController).


Instead of "Because you might want", I would argue YAGNI on this one. When 
there is a singular REST resource, I often do this kind of code in my 
routes.rb file:

# Example 1: current logged-in user
resource :user, only: [:show, :update], controller: :user


# Example 2: single sub-resource
namespace :user do
  resource :basic_information, only: :show, controller: :basic_information
end


# Example 3: there is only one dashboard when you are logged-in
resource :dashboard, only: :show, controller: :dashboard

This way, I have singular controller names for my singular resources. In 
example 3, a DashboardsController name does not make sense when you are 
logged-in. DashboardController feels more natural. If I ever need to have 
multiple dashboards in the future, I would remove controller: dashboard, 
but meanwhile, YAGNI (and in this case, this will probably never happen).


Repeating the name twice in the resource declaration feels a bit hacky, 
that is why I would like to modify Rails so that it has built-in single 
controller handling.
I have two solutions in mind:


   - The "quick fix" solution: being able to add singular: true to any 
   resource. Does not introduce any regressions in existing Rails apps. 
   Example:
   
resource :user, only: :show, singular: true



   - The "deep fix" solution: have resource map to a singular controller by 
   default. This would break most existing Rails apps, they would need to 
   migrate. But I feel like this is the best one. Example:

resource :dashboard


What do you guys think? If this seems sensible, I would like to make a PR 
for that. 


-- 
You received this message because you are subscribed to the Google Groups "Ruby 
on Rails: Core" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to rubyonrails-core+unsubscr...@googlegroups.com.
To post to this group, send email to rubyonrails-core@googlegroups.com.
Visit this group at http://groups.google.com/group/rubyonrails-core.
For more options, visit https://groups.google.com/d/optout.

Reply via email to