miércoles, 16 de julio de 2014

Comentarios - II

A continuación necesitamos un formulario para permitir a los usuarios crear comentarios para un artículo. Editaremos la vista de detalle de artículo:

# app/views/blog/detalles.rhtml
<h1><%= @articulo.titulo %></h1> <%=
simple_format(h(@articulo.cuerpo)) %> <p><em><%=
@articulo.created_at.strftime("%d-%m-%Y [%H:%M]") %></em></p>
<h2>Comentarios</h2> <% for comentario in @articulo.comentarios %>
<%= simple_format(h(comentario.texto)) %> <p><em><%=
comentario.nombre %></em>, <%= comentario.created_at.strftime("%d-
%m-%Y [%H:%M]") %></p> <% end %> <h3>Añade tu comentario a este
artículo!</h3> <% form_tag :action => 'comenta', :id => @articulo
do %> <p><label for="comentario_nombre">Nombre</label><br/> <%=
text_field 'comentario', 'nombre' %></p> <p><label
for="comentario_texto">Mensaje</label><br/> <%= text_area
'comentario', 'texto', {:rows => 5, :cols => 80} %></p> <%=
submit_tag 'Enviar comentario' %> <% end %>


En primer lugar, hemos creado una sección que muestra los comentarios del artículo. Fíjate en que encontrar los comentarios de un artículo es tan sencillo como usar @articulo.comentarios, y realizar un bucle sobre ellos. En segundo lugar, mostramos el formulario de creación de comentarios. La acción del formulario apunta a la acción "comenta", con el id del artículo actual. Dentro del formulario incluimos un área de texto para el nombre del usuario y un área de texto para el mensaje. Sólo nos falta definir la acción "comenta". Editaremos el controlador del blog y la añadimos al final:

# 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 def comenta
Articulo.find(params[:id]).comentarios.create(params[:comentario])
redirect_to :action => :detalles, :id => params[:id] end end

La nueva acción "comenta" busca el artículo con el id indicado por parámetro, y en sus comentarios crea uno con los parámetros del comentario (nombre y texto).

No hay comentarios:

Publicar un comentario