Apologies if this has been answered before.
I have just started to try out the new RESTful routes. For resources
that aren’t related to anything else, everything makes sense - for
resources with relationships, I am less certain of what the “right”
thing to do - especially in relation to the urls produced, and how to
modify those urls.
For example, if I have teams and roles - each role belonging to one
team and teams having many roles. Each role must belong to a team.
Currently my routes.rb looks something like this:
map.resources :team do |team|
The urls I think I want for roles are:
GET /roles # show all roles
GET /teams/1/roles # show all roles for team 1
GET /teams/1/roles/new # it only makes sense to create roles in the
context of a team
GET /roles/1 # show, edit, update or destroy role
To me it doesn’t make sense to have a url such as GET /teams/1/roles/1
- the role id is the thing that uniquely identifies the role, so the /
teams/1 is irrelevent. My understanding is that urls should be
unambiguous - how would such a url be different from GET /roles/1 ?
So my questions are:
- Am I “right” or have I misunderstood something?
- The two map.resources entries in routes.rb seem to clash - when I
try and call roles_path(@team) in my “new” template, rails complains -
i.e. it won’t let me output POST /teams/1/role. I can get around this
by using a hidden field in the “new” form, but this seems really
hacky. Is there any other way around this?
- I don’t want the /teams/1/roles/1 urls - is there any way of
limiting the routes that map.resources produces?
- will what I want to do break usage of ActiveResource?
On a side note, the things I have read about rest impy that the url is
a noun and you only have the four HTTP verbs available to you - I
don’t understand why urls such as /teams/1;edit are “better” than /
teams/edit/1 - both include a verb in the url - or is using the
semicolon just a convention to get around the limitation of only
having 4 verbs available to you?
Sorry for the long post - any thoughts + help greatly appreciated.