en Blog profesional

Para ver como funcionan los formularios para hacer CRUD (Create, Read, Update, Delete) en Rails vamos a hacer una aplicación muy sencilla que servirá de listín telefónico donde almacenaremos nombre, apellidos, dirección postal y todos los números de teléfono y e-mail que tengan nuestros contactos.

El esquema de base de datos será el siguiente:

agenda

Las relaciones serán 1 a muchos entre la tabla contactos y las tablas telefonos y e-mails.

Teniendo esto sabemos que necesitaremos 3 modelos que son contact, phone y email (ponemos los nombres en inglés para la pluralización de Rails), las tablas se llamarán igual.

En cuanto a controladores necesitaremos también uno por modelo para definir las acciones de CRUD que son new, create, index, show, edit, update, delete y destroy.

Y en mysql

Y pondremos en el fichero /config/database.yml los datos:

Y generamos los controllers

Ahora generamos los modelos y creamos las tablas

Establecemos las relaciones entre tablas

/app/model/contact.rb

/app/model/phone.rb

/app/model/email.rb

En nuestro caso no va a afectar mucho, pero al poner belongs_to y usar Rails 5, como es mi caso, está actuando el presence validator, que por defecto no viene activado en Rails 4, esto quiere decir que si no hay contacto no podemos crear ni teléfono ni email, algo que por otro lado tiene toda la lógica.

Pues llegados a este punto inicial ya podemos empezar a trabajar en nuestro CRUD y crear la página web con el formulario.

Para tener una apariencia “mona” vamos a poner la cabecera de bootstrap en nuestro layout por defecto y creamos las migraciones, es decir, la estructura de las tablas:

app/layouts/application.html.erb

db/migrate/20161113143332_create_contacts.rb

db/migrate/20161113143340_create_phones.rb

db/migrate/20161113143345_create_emails.rb

Ahora ya podemos migrar

Sólo nos queda configurar una ruta por defecto en nuestro archivo de rutas y a hacer formularios

Parece ser que en versiones posteriores de Rails se va a eliminar la ruta por defecto, pero mientras podremos seguirla utilizando.

Fijaros que la ruta por defecto la hemos creado sólo para dos verbos, get y post cuando lo suyo es que hubiéramos definido los 4 verbos get, post, patch, delete que se definen en REST.

También hemos definido que la página principal será el index de contacts.

Vamos a ir a construir el index del view contacts:

Los botones están así porque es la forma de definirlos en bootstrap y los turbolinks están en false porque si no falla en el momento en el que se entre desde otro enlace o se tire atrás.

Arriba hemos definido el enlace a new, así que aquí lo ponemos

Esto es realmente un formulario form_for en el que solicitamos los apellidos y el nombre, para que esto funcione en el controller tenemos que tener esta configuración

Hemos utilizado un método privado en create para que desde new sólo se pasen los parámetros definidos, ni más ni menos, al método contact_params no se puede acceder desde fuera. El formulario se añadiría en new, pero el se valida en create, donde no hay nada en la vista porque hemos creado una redirección al index.

Ahora vamos a hacer el editar que es igual al crear

app/views/contacts/edit.html.erb

Y en el controller

La única diferencia es que aquí para editar lo hacemos fijándonos en el parámetro :id

Partiendo de aquí el resto sería muy parecido, diferencias las tendríamos en borrar donde tendríamos que borrar los emails asociados y los teléfonos

Con esto ya tendríamos una web de contactos, y a vosotros os dejo la creación de las páginas para los teléfonos y los emails.

Escribir un comentario

Comentario