REST in Rails: Ejemplo del Blog y los Post

by

Como esto del REST se complico un poco voy a subir un mini HOWTO de lo que yo entendi que hay que hacer basandonos en el ejemplo de que un Blog tiene varios posts.

- Empezamos tocando el config/routes.rb :

Comentamos map.resources :posts <– Para que no se pueda acceder por las url “clasicas” de post
Editamos map.resources :blogs, :has_many => :posts <– Para que se pueda acceder por las url tipo REST de post a traves de Blog

- Ahora vamos al controlador de posts :

– En todos los metodos del controlador buscamos el blog: @blog = Blog.find(params[:blog_id]) <– Necesitamos el blog en todas las acciones de post puesto que luego lo vamos a usar en las vistas.
Editamos los redirect to @post por redirect_to(blog_posts_path(@blog)) <– no queremos redirigir a mostrar los posts, sino a los posts del blog

- Cambiamos los formularios de edicion y creacion:

– Pasaran a ser: form_for ([@blog, @post]) do |f|

– Por ultimo editamos las vistas para cambiar los links que hagan referencia a los posts:

– Los links ATRAS(listar) son : link_to “Atras”, blog_posts_path(@blog)
– Los links a EDITAR son: link_to “Editar”, [:edit, @blog,@post]
– Los links a MOSTRAR son: link_to “Mostrar”, [@blog,post] <— ojo, post sin @ cuando lo tenemos dentro de un bucle… (ej el index que genera el scaffold), en el edit del scaffold seria con @

– Los links a NUEVO son: link_to “Nuevo”, new_blog_post_path(@blog)

– Los links a Borrar son: link_to ‘Borrar’, [@blog,post], :confirm => ‘Are you sure?’, :method => :delete

Es una guia rapida y chapucera, pero para orientarnos un poco valdra no?

Advertisement

Etiquetas: , , ,

Deja un comentario

Fill in your details below or click an icon to log in:

Logo de WordPress.com

You are commenting using your WordPress.com account. Log Out / Cambiar )

Twitter picture

You are commenting using your Twitter account. Log Out / Cambiar )

Facebook photo

You are commenting using your Facebook account. Log Out / Cambiar )

Connecting to %s


Seguir

Get every new post delivered to your Inbox.