Hola a todos, mi cabeza es un mar de dudas gracias a REST, algo que imagino que en esencia será sumamente sencillo y a lo que me gustarÃa que me ayudaseis a aclarar. Antes de nada, os explicaré lo que intento hacer: la aplicación web consiste en un portal en el que los usuarios, previamente registrados, puedan publicar crónicas (lo que viene siendo más o menos un blog, vamos). La primera duda ya me viene a la hora de tratar a los usuarios: map.resource :user, map.resources :users o ambas?? En principio creé el recurso con map.resource :user, para que un usuario pueda acceder a su cuenta, pero para que el administrador pueda gestionar a los usuarios deberé usar también map.resources :users, no es asÃ? Pero lo que más me lÃa viene ahora, gracias a los recursos anidados. Según mi opinión, una crónica no tiene sentido sin un usuario, puesto que es él quien la tiene que crear, por lo tanto map.resource :user, has_many :chronicles. Pero no me interesa que sólo se puedan ver las crónicas desde el ámbito de la cuenta de un usuario, si no que también lo puedan hacer los que no están registrados, por lo tanto añado map.resources :chronicles, :only => [:index, :show]. Todas las rutas generadas serán manejadas por el controlador chronicles. AsÃ, user_chronicles_path y chronicles_path usarán la acción index del controlador chronicles, aunque deberÃan tener un efecto distinto (una listar sólo las publicadas por un usuario y la otra todas). PodrÃa hacer que user_chronicles_path, en vez de index, usara una acción creada por mà (published por ejemplo)?? Siento poner todo este tabalenguas, pero me servirÃa de gran ayuda que me indicaseis qué falla en mi planteamiento, no creo que haya diseñado bien la solución, puesto que no puede ser tan lioso. Muchas gracias
on 2010-02-19 20:16
on 2010-02-21 19:36
David Garcia wrote: > Hola a todos, > mi cabeza es un mar de dudas gracias a REST, … > > Muchas gracias Creo que, para empezar, tendrÃas que plantearte "QUE" es lo que hará tu aplicación (a grandes rasgos) y no en detalles como que si los administradores podrán ver a todos los usuarios o si los usuarios solo podrán ver sus crónicas… todo eso llegará en el controlador. Piensa en las rutas que podrás ver en tu navegador. /users /users/<id> /users/<user_id>/chronics /users/<user_id>/chronics/<id> … etc Puede que asà te aclares un poco más. Un Saludo...
on 2010-02-21 22:59
Pero esas no serán las rutas, según yo entiendo, ya que creo un recurso de la siguiente manera: map.resource :user, :has_many => :chronicles por lo tanto, las rutas serán /user /user/chronicles /user/chronicles/<id> Lo hago con resource en lugar de resources, para que el recurso user represente la cuenta de un usuario logueado. Si lo hiciese con resources, cualquiera podrÃa ingresar en la cuenta de otro simplemente poniendo en la ruta /users/<id>, por lo que también podrÃan subir crónicas en nombre de otro, es esto correcto? Muchas gracias por vuestras respuestas, aunque para vosotros sean triviales a mà me sirven de mucha ayuda. Insisto, gracias
on 2010-02-22 19:29
David Garcia wrote: > Pero esas no serán las rutas, según yo entiendo, ya que creo un recurso > de la siguiente manera: > > map.resource :user, :has_many => :chronicles > > por lo tanto, las rutas serán > > /user > /user/chronicles > /user/chronicles/<id> > > Lo hago con resource en lugar de resources, para que el recurso user > represente la cuenta de un usuario logueado. Si lo hiciese con > resources, cualquiera podrÃa ingresar en la cuenta de otro simplemente > poniendo en la ruta /users/<id>, por lo que también podrÃan subir > crónicas en nombre de otro, es esto correcto? > > > Muchas gracias por vuestras respuestas, aunque para vosotros sean > triviales a mà me sirven de mucha ayuda. > > Insisto, gracias Tal como lo planteas es totalmente correcto David. Lo bueno que tiene esto del desarrollo es que las cosas se pueden hacer de muchas maneras distintas y todas correctas o incorrectas… dependerá del que las plantea. Siguiendo tu lÃnea de planteamiento te podrÃas ahorrar el "user", haciendo un formulario de login y almacenando el "id" del usuario en la variable de sesión para luego, en el controlador, hacer las búsquedas, modificaciones o inserciones con ese dato. User.find(session["user_id"]) También te puedes plantear la lÃnea de "/users/<user_id>/chronicles" y en el controlador comprobar que el "id" del usuario que accede (el de la sesión) corresponde con el parámetro "user_id" de la URL. before_filter :check_user Seguro que a nuestro compañeros se les ocurre otras mucha maneras de hacer esto, pero creo que la que tu escojas, será la correcta… piensa que en ruby se puede hacer casi de todo ;-) Un Saludo...
Please log in before posting. Registration is free and takes only a minute.
Existing account
(Switch to SSL-encrypted connection)
NEW: Do you have a Google/GoogleMail or Yahoo account? No registration required!
Log in with Google account | Log in with Yahoo account
Log in with Google account | Log in with Yahoo account
No account? Register here.