Hi, So i really, really want to do restful rails. I've got the Peepcode screencast, read the tutorials, etc. BUT - I still don't get it. The problem is, tutorials only cover the basic stuff, and none of the application design elements. For example, I have a shop. The shop has products. The products can only be edited by an admin. So I scaffold products, and password protect the lot, that's my admin area done. Now I create a shop and I want to 'view' products. Oh wait, that's in products already, and that's not one of the 'restful 7'. I'm completely confused. What about resetting a password? Do I have to create a new reset_password resource? Any pointer would be much, much appreciated. Thank you!
on 2009-04-08 11:14
on 2009-04-08 14:23
view one = show, view many = index, whether its the admin viewing products, or a user viewing products, there's just one HTTP verb and url pattern in use... /products/ as a GET request. If it were /products/ as a POST request, it better be accompanied by sufficient parameters to define the new product resource, since that's a RESTful create request pattern. The basis of REST is the four HTTP 'verbs' GET, PUT, POST, DELETE. Rails scaffolding builds REST out with 'standard' methods of: index, show, new, edit, create, update, destroy which pair a url pattern with one of the four HTTP request types index: /plural_resource_name/ + GET - return a collection of the desired resource create: /plural_resource_name/ + POST - create a new instance of the resource new: /plural_resource_name/new + GET - return a new instance of the resource show: /plural_resource_name/id + GET - return a single instance of the resource update: /plural_resource_name/id + PUT - update a single instance of the resource destroy: /plural_resource_name/id + DELETE - destroy a single instance of the resource
on 2009-04-08 17:06
I guess there isn't much information on this, but you might want to look at well written source code for inspiration. From my experience (which isn't much), your routing table should look something like: map.resources :shops, :has_many => [:products], :shallow => true map.resources :products, :controller => "manage_products" This means that you will have 3 controllers; one for shops and two for products. One product controller will be used for showing and will be accessed as a nested resource of shops. The other will act as a stand alone resource, but will be password protected. This may not be the best design for your needs, but I hope you can improve on it.
on 2009-04-08 21:08
> BUT - I still don't get it. The problem is, tutorials only cover the > basic stuff, and none of the application design elements. I think a lot of the confusion around REST is that it really is, in the practical context of building a rails app anyway, almost too simple. That simplicity forces us to rethink how we've solved problems in the past. And breaking those old thought patterns is what is hard. This presentation really helped me get my mind around it. I'm not sure if DHH actually mentions REST in this video but the concepts are there. http://www.scribemedia.org/2006/07/09/dhh/ good luck!
on 2009-04-09 00:42
I think the problem may actually be that he's after application architecture tutorials in rails, and most rails tutes take it for granted you have somewhat of a grasp on big picture scenarios. Blog: http://random8.zenunit.com/ Learn rails: http://sensei.zenunit.com/