Mostrando entradas con la etiqueta MVC. Mostrar todas las entradas
Usando Scaffolding
Posted by makio in MVC, Rails, Scaffolding on domingo, 14 de junio de 2009
En el post anterior instalamos MySQL y las librerías necesarias para usarlo en nuestras futuras aplicaciones.
Vamos a generar nuestro primer CRUD (Create, Read, Update y Delete) en rails usando Scaffold Generators, para esto veamos que es Scaffolding.
Scaffolding: Es una vía rápida de agregar una clase de Active Record creando una serie de acciones estandarizadas para lectura, consultas, creación, actualización y eliminación de datos en nuestra aplicación. Estas acciones estandarizadas agregan el controlador lógico y una plantilla por default que muestra los campos que se van a desplegar y que tipos de entradas se usarán.
Ahora veamos como funciona en la práctica, si no quedó muy clara la definición con este ejemplo no habrá dudas.
Crear una aplicación nueva:
$ rails Video -d mysql
Crear Bases de Datos para la aplicación:
$ cd Video
$ rake db:create:all
Usando Scaffold
Vamos a usar el comando generate que se encuentra en la carpeta script de nuestra applicación.
ruby script/generate
Después usaremos el parametro scaffold que indica que vamos a usar este método para generar nuestro modelo.
scaffold
Por último asignamos el nombre de nuestro modelo y los campos que se utilizarán en la base de datos para almacenarlos.
Pelicula titulo:string descripcion:text anio:string
Juntando todo tendremos lo siguiente y lo ejecutamos:
$ ruby script/generate scaffold Pelicula titulo:string descripcion:text anio:string
exists app/models/
exists app/controllers/
exists app/helpers/
create app/views/peliculas
exists app/views/layouts/
exists test/functional/
exists test/unit/
create test/unit/helpers/
exists public/stylesheets/
create app/views/peliculas/index.html.erb
create app/views/peliculas/show.html.erb
create app/views/peliculas/new.html.erb
create app/views/peliculas/edit.html.erb
create app/views/layouts/peliculas.html.erb
create public/stylesheets/scaffold.css
create app/controllers/peliculas_controller.rb
create test/functional/peliculas_controller_test.rb
create app/helpers/peliculas_helper.rb
create test/unit/helpers/peliculas_helper_test.rb
route map.resources :peliculas
dependency model
exists app/models/
exists test/unit/
exists test/fixtures/
create app/models/pelicula.rb
create test/unit/pelicula_test.rb
create test/fixtures/peliculas.yml
create db/migrate
create db/migrate/20090614172420_create_peliculas.rb
Para saber como se generan las tablas con scaffolding, hay que abrir este archivo: db/migrate/20090614172420_create_peliculas.rb

Este archivo crea la tabla llama peliculas que estará ligada al modelo Pelicula. Y los parámetros que asignamos se mostrarán como las columnas de la tabla con su tipo.
Aplicar la migración:
Usando el comando rake db:migrate nos genera la tabla en nuestra base de datos.
$ rake db:migrate
(in /home/makio/www/Video)
== CreatePeliculas: migrating ================================================
-- create_table(:peliculas)
-> 0.0813s
== CreatePeliculas: migrated (0.0817s) =======================================
Ya explicado esto, corramos la aplicación en el servidor:
$ script/server
=> Booting WEBrick
=> Rails 2.3.2 application starting on http://0.0.0.0:3000
=> Call with -d to detach
=> Ctrl-C to shutdown server
[2009-06-14 12:36:03] INFO WEBrick 1.3.1
[2009-06-14 12:36:03] INFO ruby 1.8.7 (2008-08-11) [i486-linux]
[2009-06-14 12:36:08] INFO WEBrick::HTTPServer#start: pid=6851 port=3000
Abrimos nuestro navegador y entramos a esta dirección: http://127.0.0.1:3000/peliculas

Nuestro primer controlador está listo, ya tenemos una página funcional para agregar películas, editarlas, eliminarlas y listarlas. Ya por último dejo unos screenshots de algunas funciones, ya queda de tu parte usarlas para ver la funcionalidad.
Agregar Pelicula

Listar Peliculas

Espero esto les sea de mucha utilidad y haya quedado claro el funcionamiento de scaffolding, en el siguiente post haremos esto mismo pero de manera manual.
MVC (Model-View-Controller)
Rails usa la arquitectura model-view-controller, para esto veamos la definición de MVC de wikipedia:
Modelo Vista Controlador (MVC) es un patrón de arquitectura de software que separa los datos de una aplicación, la interfaz de usuario y la lógica de control en tres componentes distintos.

La definición puede que no deje claro que es y como es que trabaja, veamos parte por parte esta arquitectura y cual es el objetivo de cada una:
Models: Estos son responsables de la comunicación con el back-end de los datos almacenados, que seria una base de datos (SQLlite, MySQL, SQL Server, etc).
Views: Las vistas son responsables de lo que ve el usuario el front-end de la aplicación; estos contienen una mezcla de HTML y el uso de algún lenguaje embebido (en este caso ruby) para generar contenido dinámico.
Controllers: Los controladores son los responsables de saber que hacer con las entradas de los usuarios. Manejan los requests del navegador, llaman las funciones apropiadas sobre los objetos del modelo e interpreta las vistas en HTML puro para regresarlo al navegador.