Resource has_one associations

2 views
Skip to first unread message

Marc Love

unread,
May 12, 2007, 7:40:24 PM5/12/07
to Ruby on Rails: Core
I was working on a resources-related patch recently and came across an
implementation question...

When mapping resources with has_one associations, the has_one
association is modeled by the map_associations method as a singleton
resource. I thought that a singleton resource was supposed to be
global to the application's current user. has_one's are not global to
the user, they're global to the resource they belong to. This also
has the (I think) unintended effect of looking for a single named
controller. For instance:

map.resources :products, :has_one => :manufacturer

will look for a ManufacturerController not a ManufacturersController.
If I wish to access the manufacturers resource outside of the context
of this association, I'll need to add a ManufacturersController as
well. Shouldn't has_one associations be mapped the same way has_many
associations are? or am I just not understanding the implementation
chosen?

Thanks,
Marc

DHH

unread,
May 14, 2007, 3:27:24 PM5/14/07
to Ruby on Rails: Core
> Shouldn't has_one associations be mapped the same way has_many
> associations are? or am I just not understanding the implementation
> chosen?

I've come to the realization that all controllers should always be
plural. Whether it's with map.resource/s, has_many, or has_one. We'll
be changing this shortly.

Josh Knowles

unread,
May 14, 2007, 4:10:17 PM5/14/07
to rubyonra...@googlegroups.com
On 5/14/07, DHH <david.he...@gmail.com> wrote:
I've come to the realization that all controllers should always be
plural. Whether it's with map.resource/s, has_many, or has_one. We'll
be changing this shortly.

Are you saying that if I have a map.resource :session that this should map to a plural SessionsController, as opposed to SessionController?




--
Josh Knowles
joshk...@gmail.com
http://joshknowles.com

Rick Olson

unread,
May 14, 2007, 5:10:44 PM5/14/07
to rubyonra...@googlegroups.com
> Are you saying that if I have a map.resource :session that this should map
> to a plural SessionsController, as opposed to SessionController?

The rationale for this is consistency. Here's a case where you would
want it to be plural:

# /avatars, AvatarsController
map.resources :avatars

# /users/1/avatar, AvatarsController
map.resources :users do |user|
user.resource :avatar
end

--
Rick Olson
http://lighthouseapp.com
http://weblog.techno-weenie.net
http://mephistoblog.com

DHH

unread,
May 14, 2007, 6:00:13 PM5/14/07
to Ruby on Rails: Core
> Are you saying that if I have a map.resource :session that this should map
> to a plural SessionsController, as opposed to SessionController?

Right. As Rick explains, this completely removes the confusion on how
controllers should be named. They're just always plural regardless of
whether they're being exposed through singular or plural resources (or
both).

Marc Love

unread,
May 14, 2007, 6:03:13 PM5/14/07
to Ruby on Rails: Core
Excellent. Thanks for the explanation.
Reply all
Reply to author
Forward
0 new messages