Hola, estoy poniéndome al día con esto de REST y me estoy haciendo un
poco de lío con los recursos anidados. Os pongo un ejemplo para ver si
me podéis arrojar un poco de luz en el tema, o indicarme
algúntutorial actualizado.
En mi ejemplo, tengo una aplicación de blog multiusuario. Cada usuario
tiene muchos posts, cada post pertenece a un usuario y tiene muchos
comentarios, y cada comentario pertenece a un usuario y a un post.
Lo que quiero es anidar las rutas para que un post sólo tenga sentido
dentro del contexto de un usuario determinado (su autor), y los
comentarios, dentro del contexto del post al que pertenecen.
Ademásquiero poder ver el controlador de usuarios sin ningún contexto por
encima. O sea, rutas como estas:
http://localhost:3000/users
http://localhost:3000/users/1
http://localhost:3000/users/1/posts
http://localhost:3000/users/1/posts/1/
http://localhost:3000/users/1/posts/1/comments
http://localhost:3000/users/1/posts/1/comments/1
Esto lo he conseguido con las siguientes rutas, y con un before_filter
en el controlador de posts y comments para que cargue el contexto del
padre:
map.resources :users
map.resources :posts
map.resources :comments
map.resources :posts do |post|
post.resources :comments
end
map.resources :users do |user|
user.resources :posts do |post|
post.resources :comments
end
end
El caso es que funciona, pero no entiendo por qué necesito definir estas
dos:
map.resources :posts
map.resources :comments
Quiero decir, si las quito no funciona, pero yo no quiero poder entrar
directamente a /posts sin el contexto de usuario, ni a /comments sin
el contexto del post…
También he probado con el azucar sintáctico siguiente:
map.resources :users, :has_many => :posts
map.resources :posts, :has_many => :comments
Pero tampoco va bien…
¿Alguien me echa una manita? Gracias!