Modificando el Módulo Generado

Tenemos nuestro código generado, pero más que nada esto fué para que nuestros usuarios lo vieran e hicieran algunas decisiones en cuanto a los campos que faltan, etcétera. Ahora analizaremos cómo funciona una vista para comenzar a hacer las modificaciones.

Vistas en nuestro módulo

Cuando generamos el módulo de personas, se generó un módulo de controlador y varias vistas. Repasemos lo que fué generado:

	app/views/layouts/personas.rhtml
	app/views/personas/_form.rhtml
	app/views/personas/edit.rhtml
	app/views/personas/list.rhtml
	app/views/personas/new.rhtml
	app/views/personas/show.rhtml		

Recordemos que ruby utiliza convención en vez de configuración. La vista para el módulo de personas siempre comenzará en el esquema (layout) de personas. Cuando vemos el texto dentro del archivo layouts/personas.rhtml veremos lo siguiente:


<html>
<head>
  <title>Personas: <%= controller.action_name %></title>
  <%= stylesheet_link_tag 'scaffold' %>
</head>
<body>

  <p style="color: green"><%= flash[:notice] %>

<%= @content_for_layout %> </body> </html>

Un archivo RHTML es una combinación de HTML y ruby. El código ruby vive dentro de los delimitadores <% %>, o <%= %> si desea el resultado de una función desplegado en el HTML.

Veamos la última parte del esquema de personas:


  <%= @content_for_layout %>

Este comando le dice a rails que es aquí donde puede insertar el contenido del esquema. El esquema es como un formato general para este controlador.

Despachando peticiones en Rails

El resultado de una peticion a nuestra aplicación depende del URL. Cuando un usuario pide http://miservidor/persona/list, Rails deduce que el controlador se llama persona, y la acción dentro del controlador es list. Así que rails hará lo siguiente:

Esto quiere decir que, si usted desea cambiar de nombre al método list para traducirlo a listar, debe hacer lo siguiente:

Comandos con formularios

Gran parte de lo que hacemos en Rails es llenar formularios. Los formularios en Rails son compartidos utilizando el archivo _form.rhtml. Veamos una de las vistas que requieren el formulario, app/views/personas/edit.rhtml:


<%= start_form_tag :action => 'update', :id => @persona %>
  <%= render :partial => 'form' %>
  <%= submit_tag 'Edit' %>
<%= end_form_tag %>

<%= link_to 'Show', :action => 'show', :id => @persona %> |
<%= link_to 'Back', :action => 'list' %>

Note que el módulo de edicion prepara la forma para que llame el comando update y despues emite un contenido "parcial" llamado "form". Dentro del contenido parcial _form.rhtml, podemos ver lo siguiente:

<%= error_messages_for 'persona' %>

<!--[form:persona]-->
<p><&t;label for="persona_nombre">Nombre</label>
<%= text_field 'persona', 'nombre' %></p> (mas y mas campos..) <!--[eoform:persona]-->

Rails tiene comandos para todos los controles de forma del HTML, y tien algunos controles extra. Cuando usted estudie el HTML generado, podrá hacer sus propios controles complejos.

Parciales

Como lo hemos visto con el ejemplo de la forma, los parciales son muy útiles. Un "parcial" es un fragmento de RHTML que usted puede re-utilizar en varios contextos, ya sea en varios métodos, en varios controladores, o varias veces en la misma vista.

Usted puede crear un parcial simplemente añadiendo el archivo (su nombre debe comenzar con un simbolo de subrayado) y llamando el parcial con render :partial=>'miparcial' (para un archivo llamado _miparcial.rhtml). Por defecto, el parcial será buscado dentro del directorio de la vista actual, pero usted puede cambiar el directorio simplemente mencionandolo, por ejemplo render :partial=>'directorio/miparcial' (en este caso, el archivo sería app/views/directorio/_miparcial.rhtml).

El parcial tendra acceso a todas las variables de instancia del controlador y la vista que lo llamó.

Ideas para usos de parciales

Además de las formas, he aquí algunos ejemplos para uso de parciales:

Cambiando el Listado

Ahora hay que hacer que el listado se vea mejor. Primero veamos el código generado en views/personas/list.rhtml (o listar, si ya le cambió el nombre).

Leyendo el código generado descubriremos el uso de metadata en las columnas de registros de ActiveRecord:


<table>
  <tr>
  <% for column in Persona.content_columns %>
    <th>< column.human_name %><th>
  <% end %>
  <tr>

<% for persona in @personas %>
  <tr>
  <% for column in Persona.content_columns %>
    <td><%= h persona.send(column.name) %><td>
  <% end %>
    <td>< link_to 'Show', :action => 'show', :id => persona %><td>
    <td>< link_to 'Edit', :action => 'edit', :id => persona %><td>
    <td>< link_to 'Destroy', { :action => 'destroy', :id => persona }, 
               :confirm => 'Are you sure?'
 %><td>
  <tr>
<% end %>
<table>

Note que el código generado es dinámico. Cuando usted añade columnas a su objeto Persona, la tabla tendrá esas columnas tambien. También note que para crear un enlace a alguna acción sobre la persona en cada renglón, se utiliza el comando link_to.

Evidentemente, esto sólamente funciona para prototipos rápidos, porque el dinamismo sólo aplica a las columnas y no a los métodos calculados (como el campo calculado "apellidos"). Así que cambiamos el listado para que sea más estático:

<% for persona in @personas %>
  <tr>
    <td><%= h persona.nombre %><td>
    <td><%= h persona.apellidos %><td>
		... (mas campos) .. 
    <td>< link_to 'Show', :action => 'show', :id => persona %><td>
 </tr>

Obviamente es aquí donde usted puede hacer el HTML tan artístico como quiera. Hablaremos de HTML y CSS más tarde, pero esto le da una buena base para comprender cómo funciona la generación de vistas en Rails y cómo usted puede cambiar el HTML generado y planear su sitio. Por ahora cambie la tabla para que tenga sólo los registros que usted desee.