Chubbs
(Chubbs)
January 9, 2008, 6:10am
1
hey i am having problems when defining routes like this.
map.room 'room/:name', :controller => 'room', :action => 'show'
when i try goto any url such as:
/room/123
/room/technology
it works fine to goto the show method with a param :name.
but when i want to use my other actions such as 'list' it still treats
it as room/:name and will direct it to my show action.
eg.
room/list gives
**NoMethodError in Room#show
Showing room/show.rhtml where line #1 raised:
You have a nil object when you didn't expect it!
The error occurred while evaluating nil.name
Chubbs
(Chubbs)
January 9, 2008, 6:16am
2
mmm but how do i create the route for /room/technology?
radar
(Ryan Bigg)
January 9, 2008, 6:20am
3
Ahh, the wonders of restful routing elude you:
map.resources :room, :member => { :technology => :get }
Or if you’re doing it for a whole bunch of rooms:
map.resources :room, :collection => { :technology => :get }
Whether you do :member or :collection determines whether you do technology_room_path(@room ) or technology_rooms_path(@room ).
I covered restful routing a few days ago on this list and wrote a smallish tutorial for it: http://frozenplague.net/?p=108
If you have any questions do not hesitate to contact me through the list or through GTalk or MSN at this email.
Chubbs
(Chubbs)
January 9, 2008, 6:29am
4
im a bit confused
im just wanting to call the show action for a name for the room.
eg,
/room/technology
should goto /room/show with param[:name] = technology,
so i can show the subtopics within technology
would i have to create a maps.resources for each of my room names ?
radar
(Ryan Bigg)
January 9, 2008, 6:31am
5
No, map.resources :rooms will automatically define the routes you need for CRUD’ding resources: index, show, new, create, edit, update & delete.
This means when you do /rooms/technology it’ll actually pass in “technology” as params[:id], not params[:name]. Just a minor alteration in your code should fix this.
Chubbs
(Chubbs)
January 9, 2008, 6:39am
6
ahh i get you,i change it and got it working
ok ill start using RESTful routing from now on,
thanks for the advice
-chubbs
fxn
(Xavier Noria)
January 9, 2008, 8:31am
7
Just another detail: you can still have the room name in the URL with a custom Room#to_param that returns the name, or the trick "#{id}-name" you can see out there. That parameter goes to params[:id] anyway.
-- fxn