jueves, 10 de julio de 2014

Parte pública del blog - I

Ya tenemos un interfaz web que nos permite administrar los artículos. Esta zona será privada (posteriormente podríamos ponerle protección por usuario y contraseña); necesitamos una parte pública que muestre los artículos. Vamos a crear para ello un nuevo controlador, que tendrá por el momento sólo 2 acciones: "index" (la página principal que mostrará los artículos) y "detalles" (la página que mostrará todos los detalles de un artículo):

$ script/generate controller Blog index detalles exists
app/controllers/ exists app/helpers/ create app/views/blog exists
test/functional/ create app/controllers/blog_controller.rb create
test/functional/blog_controller_test.rb create
app/helpers/blog_helper.rb create app/views/blog/index.rhtml
create app/views/blog/detalles.rhtml

Ahora abriremos el controlador, app/controllers/blog_controller.rb, y definiremos las dos acciones:

# app/controllers/blog_controller.rb
class BlogController < ApplicationController def index @articulos
= Articulo.find(:all, :order => 'id DESC') end def detalles
@articulo = Articulo.find(params[:id]) end end 

Como vemos, las acciones son muy sencillas: en index, creamos el objeto @articulos que contendrá todos (:all) los artículos, ordenados a la inversa (:order => 'id DESC') para mostrar los últimos arriba. La acción "detalles" creará el objeto @articulo buscándolo por el id pasado como parámetro. Ahora necesitamos crear las vistas, que cogerán estos objetos que hemos preparado en el controlador y mostrarán su información por pantalla. Comencemos por la vista correspondiente a la acción "index", editando el fichero app/views/blog/index.rhtml. Como verás es un simple bucle que recorre @articulos, y para cada uno muestra su título, cuerpo y una línea de separación al final. El título se muestra en forma de enlace a la acción "detalles", con el id del artículo en curso dentro del bucle. El cuerpo se muestra usando tres "helpers" de texto: "h" se encarga de asegurar que el html mostrado es seguro (para evitar buena parte de ataques); "truncate" se encarga de recortar el texto en caso de que sea más largo que la longitud especificada, y "simple_format" se encarga de dar un formato muy simple a un texto para mostrarlo como HTML, por ejemplo convirtiendo los saltos de línea en párrafos.

# app/views/blog/index.rhtml
<% for articulo in @articulos %> <h1><%= link_to
articulo.titulo, :action => :detalles, :id => articulo %></h1> <%=
simple_format(truncate(h(articulo.cuerpo),200)) %> <hr /> <% end
%>

No hay comentarios:

Publicar un comentario