Skip to content

Instantly share code, notes, and snippets.

@Elicia
Last active February 23, 2024 22:56
Show Gist options
  • Save Elicia/8530046 to your computer and use it in GitHub Desktop.
Save Elicia/8530046 to your computer and use it in GitHub Desktop.
Scaffold en Rails

ANEXO3: SCAFFOLDING EN RUBY ON RAILS

Hola, que tal amigos de Devcodela,! Les habla Elicia Cordova. Y en este video aprenderemos a generar código de manera fácil y rápida utilizando scaffold en Ruby on Rails.

¿Qué es Scaffold?

Scaffold significa andamio en inglés. Es un generador de código el cual nos permite tener las funcionalidades básicas de administración de un modelo, es decir el CRUD (Create, Read, Update, Delete), y que son típicas para cualquier sistema transaccional. Para el objetivo de este video crearemos dos modelo de datos demo para los usuarios y sus respectivos posts de un blog utilizando el generador de código scaffold.

Modelando una demo de Users y Post

Los usuarios de nuestro blog demo tendrán un único identificador entero llamado id, nombre (string) y un email (string). Y para nuestro post tendrá un único identificador entero llamado id, titulo (string) y contenido (string) y un atributo que asocia cada posts a un usuario en particular, esto es el atributo user_id.

![](https://dl.dropboxusercontent.com/u/47365355/tabla.jpg)

Como veremos mas adelante posts y users cada una corresponde a una tabla en una base de datos y sus atributos son columnas de cada tabla.

Implementación de User

En esta sesion implementaremos el modelo de datos del user, junto con una interfaz web para el modelo. Vamos a pensar en un recurso user, el cual nos permitirá pensar en los users como objetos que se pueden leer, actualizar y eliminar a través del protocolo http. Nuestro recurso user será creado por un programa generador de código llamado scaffold el cual viene como estándar con cada proyecto de Rails. Entonces,

>>>
$ rails generate scaffold User nombre:string email:string

Los parámetros que se pasan al comando scaffold son el nombre del recurso (User) junto con parámetros opcionales para los atributos del módulo de datos. Al incluir nombre y email hemos organizado el modelo de User de la imagen anterior. No hay necesidad de incluir el parámetro id, pues éste es creado automáticamnete por Rails para el uso de la clave principal o primary key de la Base de Datos.

Implementación de Post

Al igual que el recuso User, generamos código scaffold en este caso la aplicacion del modelo de datos post. Entonces,

>>>
$ rails generate scaffold Post titulo:string contenido:string user_id:integer

Los argumnetos que se pasan al comando scaffold son el nombre del recurso (Post) junto con parámetros opcionales para los atributos del módulo de datos. Igualmente, no hay necesidad d incluir el parámetro id, pues éste es creado automáticamnete por Rails para el uso de la clave principal o primary key de la Base de Datos. Por el momento no consideramos las asociaciones entre User y Post, eso lo veremos mas adelante en este video.

Migraciones

A continuación actualizaremos nuestra Base de datoscon los datos de los modelos, por eseo debemos migrar la Base de Datos con RAKE.

>>>
$ bundle exec rake db:migrate

Esto simplemente actualizará la Base de Datos con los modelos de user y post.

Con esto podemos correr el servidor web local usando rails server o rails s. Vemos nuestra aplicacion demo en localhost:3000

Un paseo por los Users

Despues de ingresar a localhost:3000 nos mostrarà la misma página por defecto de Rails, pero al entrar a /users nos mostrarà una lista de todos los users y una pagina donde podemos crear un nuevo posts. Como vemos a continuacion la siguiente tabla muestran todas las acciones y su respectivas URLs.

>>>
URL     Action  Purpose
/users  index   page to list all users
/users/1        show    page to show users with id 1
/users/new      new     page to make a new user
/users/1/edit   edit    page to edit user with id 1

Partimos de la pàgina para mostrar todos los users de nuestra app que en un principio no hay user.

Un paseo por los Posts

De la misma manera, accedemos a /posts nos mostrarà una lista de todos los posts y una pagina donde podemos crear un nuevo posts. Como vemos a continuacion la siguiente tabla muestra la correspondencia entre las páginas y las URLs.

>>>
URL     Action  Purpose
/posts  index   page to list all posts
/posts/1        show    page to show posts with id 1
/posts/new      new     page to make a new post
/posts/1/edit   edit    page to edit post with id 1

En un principio no hay posts.

Un usuario has_many Posts

Una de las caracteristicas de Rails es la capacidad de formar asociaciones entre diferentes modelos de datos. En nuestro caso cada user tiene nuchos posts. Podemos actualizar el modelo de user y el de posts como sigue.

>>>
A user has many microposts.
app/models/user.rb
class User < ActiveRecord::Base
  has_many :microposts
end
>>>
A micropost belongs to a user.
app/models/micropost.rb
class Micropost < ActiveRecord::Base
  belongs_to :user
end

Podemos visualizar el resultado de esta asociación. Debido a que la columna user_id en la tabla post, Rails(mediante Active Record) puede infererir los post asociados a cada usuario.

Por ahora podemos examinar las relaciones de asociación usuario-post utilizando la consola $ rails console y luego recuperamos el primer usuario de la base de datos utilizando User.first y se muestran en primer_usuario. Luego accedemos a los posts de ese usuario utilizando primer_usuario.posts. Active Record devuelve todos los posts con user_id igual que el id del primer_nombre. Mas adelante aprendermos màs sobre esto.

>>>
$ rails console
>> first_user = User.first
=> #<User id: 1, name: "Michael Hartl", email: "[email protected]",
created_at: "2013-03-06 02:01:31", updated_at: "2013-03-06 02:01:31">
>> first_user.microposts
=> [#<Micropost id: 1, content: "First micropost!", user_id: 1, created_at:
"2013-03-06 02:37:37", updated_at: "2013-03-06 02:37:37">, #<Micropost id: 2,
content: "Second micropost", user_id: 1, created_at: "2013-03-06 02:38:54",
updated_at: "2013-03-06 02:38:54">]
>> exit

No te preocupes si aún no entiendes bien el código por dentro, pues en el siguiente video lo explicaré mas a detalle todo el código generado así como el funcionamiento del MVC de nuestra aplicación, Asi q no se lo pierdan.

Bueno amigos, eso fue todo por le video de hoy, espero q les haya gustado y no se olviden de seguirnos en nuestras redes sociales, envíennos sus comentarios, sugerencias y dudas que les responderemos en la brevedad posible. Hasta la proxima.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment