La edición de datos in situ usando Javascript es uno de los galones que debe exhibir cualquier web moderna que se precie de ser Web 2.0 (sea esto lo que sea) En este entrada vamos a ver cómo podemos implementar un efecto parecido al que describió el otro día Fernando usando, cómo no, Ruby on Rails.
Crear la aplicación
A estas alturas, esto debería ser rutinario y bien conocido. Creamos en primer lugar la aplicacion con
rails prueba1
Y configuraremos una base de datos a la que se pueda acceder en config/database.yml. A continuación, crearemos el esquema e introduciremos algunos registros usando una migración, como la siguiente:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
class Inicial < ActiveRecord::Migration class Item < ActiveRecord::Base end def self.up create_table :items do |t| t.column :texto, :string end Item.create :texto => 'Desde la dehesa la hija del leal jefe desgaja la leña ajada' Item.create :texto => 'Agasajadas las hadas agasajadas' Item.create :texto => 'Jovencillos emponzoñados de whisky, qué figurotas exhibís?' end def self.down end end |
Algunos comentarios a la migración: en este ejemplo rápido no hemos implementado la marcha atrás que debería ir en self.down.
Y, más importante, no hemos sido capaces de poder crear el esquema de la tabla y de insertar tuplas en la misma migración sin la declaración dummy de la clase heredera de ActiveRecord para representar la tabla que vamos a crear.
Tras esto, generaremos el correspondiente código de andamiaje:
ruby script/generate scaffold Item
Ya podemos acceder a nuestra aplicación y ver la lista de items

AJAX for the people!
Reemplazaremos el contenido de app/views/items/show.rhtml por
1 2 3 4 5 6 |
<%= javascript_include_tag :defaults %> <b>Texto</b> <%= in_place_editor_field :item, :texto %> <%= link_to 'Edit', :action => 'edit', :id => @item %> | <%= link_to 'Back', :action => 'list' %> |
Es decir, incluimos la librería estándar de AJAX (esta inclusión en una aplicación “de verdad” la haríamos en alguna plantilla o layout global, como application.rhtml). Dado que nuestro modelo sólo tiene una columna, podemos quitar todo el andamiaje y tratar el único campo que tenemos, nombre.
in_place_editor_field :item, :texto
Esta es la línea que hace toda la magia Javascript en la vista, que indica que queremos editar el campo texto del objeto @item que trata el formulario.
Por ultimo, debemos añadir algo de logica al controlador para tratar los nuevos métodos vivos que invocará el código Javascript. Afortunadamente, Rails nos vuelve a hacer la vida más fácil, pues basta con añadir lo siguiente a nuestra clase items_controller.rb
1 2 3 4 5 6 7 8 9 10 |
class ItemsController < ApplicationController in_place_edit_for :item, :texto def index list render :action => 'list' end (etcetera) |
La cosa en funcionamiento
Con la aplicación en funcionamiento, podemos ver cualquier elemento de nuestra lista, que tiene el mismo aspecto inocente de antes…

... pero si pulsamos sobre el texto, éste se convierte en un campo de edición….

... que al pulsar en ‘SAVE’ almacena nuestros cambios


¡Más fácil imposible!


June 19th, 2007 at 06:58 PM
Como veo que tratas mucho el tema de Rails, te pregunto aki con respecto a el in_place_edit_for, No tienes ningún problema con las ñ o con las tildes á é í ó ú??? Ultimamente usé el in_place edit pero me da error al introducir los caracteres que te digo.
Gracias y felicitaciones por el blog, es muuu interesante.
November 14th, 2007 at 05:37 PM
Hola yugger,
El problema que tienes con los caracteres especiales en php se soluciona printando con urt8 para que ajax lo muestre correctamente, puede que haya algo parecido en ruby? Estoy echando un vistazo a Rubi ahora mismo y no lo tengo por cierto, pero dudo que no exista algo parecido…