Carlos Esteban León Pinilla
Luis Daniel Flores Velázquez
De gran ayuda ! <3
Jose Ramos
Graicias!!
¿Cómo construir scaffolds y trabajar con modelos en Rails?
¡Vamos a adentrarnos en el emocionante mundo de Rails y crear nuestros primeros scaffolds! Hoy construiremos los modelos de tarea y categoría, y los potenciaremos con un sistema de internación para sus vistas. Iniciaremos instalando las herramientas necesarias y luego procederemos con la creación de estos modelos. Sin más preámbulos, ¡vamos a ello!
¿Cómo preparamos el entorno?
Antes de comenzar a crear scaffolds, debemos preparar nuestro entorno frontend con SimpleFrame y Bootstrap:
Instalar el preset Bootstrap:
simpleframe 2.install --preset=bootstrap
Esto genera el archivo SimpleFrame Bootstrap, simplificando la integración de nuestras vistas con Bootstrap.
¿Cómo generamos los modelos de categoría y tarea?
Primero, vamos a crear el scaffold para el modelo categoría, ya que cada tarea pertenecerá a una categoría. El modelo categoría incluye una descripción y un nombre, que podemos definir como de tipo string. Sin embargo, podrías optar por text para la descripción si necesitas una longitud mayor.
rails generate scaffold Categoria nombre:string descripcion:string
Después, construiremos el scaffold para el modelo tarea, que también contiene un nombre, una descripción y una fecha de vencimiento. Además, cada tarea estará asociada a una categoría, lo cual implementaremos usando el tipo references.
rails generate scaffold Tarea nombre:string descripcion:string fecha_vencimiento:date categoria:references
¿Cómo migramos las tablas a la base de datos?
Para ejecutar nuestras migraciones, necesitamos ajustar nuestro acceso a la base de datos configurando PostgreSQL, ya que estamos usando este sistema en lugar de SQLite:
Configurar PostgreSQL:
config/database.yaml.development y test, configura host, user y password.Ejemplo:
development: host: localhost user: platzi password: platzi
Ejecutar migraciones:
rails db:migrate
¿Cómo establecemos relaciones entre modelos?
El autogenerador de Rails crea una relación belongs_to entre tarea y categoría automáticamente. No obstante, para reflejar que una categoría puede tener muchas tareas, debemos modificar el modelo Category agregando has_many :tasks.
app/models/categoria.rb, añade:
has_many :tareas
¿Cómo anotamos nuestros modelos para mayor claridad?
Rails nos permite utilizar la gema annotate para documentar mejor los atributos y columnas de los modelos.
Instalar y utilizar annotate:
gem 'annotate' al Gemfile.bundle install annotate --models
Esto proporcionará información descriptiva sobre ambos modelos en sus respectivos archivos.
¿Cómo corremos la aplicación y probamos el resultado?
Finalmente, podemos ejecutar nuestro servidor Rails y comprobar las funcionalidades creadas en nuestro navegador:
Iniciar el servidor:
rails server
Acceder a nuestras rutas:
localhost:3000./tareas y /categorias para ver las listas de tareas y categorías.Con todo esto, hemos establecido un sistema básico en Rails utilizando modelos bien estructurados e integraciones eficientes con Bootstrap. ¡Sigue explorando y aprendiendo para llegar a construir grandes proyectos en Rails!
Carlos Esteban León Pinilla
Luis Daniel Flores Velázquez
De gran ayuda ! <3
Jose Ramos
Graicias!!
Adrian Bautista Orozco
al momento de generar las migraciones ya sea usando postgres o mysql, es necesario crear la base de datos antes que las migraciones?
Juan Zenón
Jose Ramos
Gracias Juan Zenón!
Abner Alejandro Nicolás Recinos
Tuve errores al intentar generar la base de datos, use el siguiente tutorial, de DigitalOcean:
Manuel Alejandro González Cabello
Estos son los comandos utilizados en la clase
g simple_form:install --bootstrap
rails g scaffold Category name:string description:text
rails g scaffold Task name:string description:text due_date:date category:references
Danniel Sequera
rails g simple_form:install --bootstrap
Jesus Eduardo Cervantes Hernandez
La verdad tuve muchos problemas con el comando 'rails db:migrate', borré y cree de nuevo mi usuario en postgres pero no se arregló. Al final lo que faltaba era crear la base de datos antes de ejecutar las migraciones:
rails db:create
David Espino
Uff, me salvaste la vida. Gracias!
Adam Rebolledo
si se equivocan usando el scaffold pueden usar el mismo comando con los cambios que requieran añadiendo al final --force para reescribir los archivos generados por el comando
Daniel J. Pérez
Eso no lo sabía, yo los eliminaba con rails destroy scaffold, es bueno saber que existe otra forma, gracias por compartirlo
Juan Ramon Guzman Aguilar
Johan asume que ya tenemos una base de datos creada, en mi caso no lo fue asi asi que para ubuntu 20.04 este recurso me salvo
Angel Ramirez
Justo eso necesitaba. Eres un grande!
Anibal Español
Después de ejecutar el comando rails db:migrate obtengo el siguiente error:
-- rails aborted! PG::ConnectionBad: FATAL: password authentication failed for user "platzi" FATAL: password authentication failed for user "platzi"
-- En el minuto 4:06 el profesor comenta: "Inicialmente habíamos configurado nuestra base de datos para que el user fuera platzi y el password se llamara de la misma manera". No se si me perdí un paso de configuración previa, pero decidí utilizar el comando rails db:create obteniendo nuevamente un error:
-- FATAL: password authentication failed for user "platzi" FATAL: password authentication failed for user "platzi" Couldn't create 'organizador_development' database. Please check your configuration. rails aborted! PG::ConnectionBad: FATAL: password authentication failed for user "platzi" FATAL: password authentication failed for user "platzi"
-- ¿Alguna sugerencia para solucionar esto?
Johan Tique
ProfesorAnibal Español
Lester Potestad Berovides
La gema annotate me daba problemas para poder utilizarla con Ruby 3.2.0 y utilicé un fork llamado annotaterb que me ha funcionado muy bien
Leomar Salazar
Pase horas lidiando con un problema de versiones de rails y annotate, pero al final lo que me funcionó fue este fork. Gracias!
Emerson Espinoza Aguirre
Por si les sale este problema al generar los annotate para los modelos.
annotate --models
Usage: annotate imagein.jpg imageout.jpg Standard input should consist of lines in the following formats: color r g b (0-255 each) [a (0-127, 0 is opaque)] font fontname size pointsize align (left|right|center) move x y text actual-output-text If the file 'paris.ttf' exists in /usr/share/fonts/truetype or in a location specified in the GDFONTPATH environment variable, 'font paris' is sufficient. You may also specify the full, rooted path of a font file.
ejecutar nuevamente desde el terminal de la siguiente manera.
bundle exec annotate --models
Georg Weibel
tuve problemas con annotate, por la versión de rails (> 8), así que usé 'annotaterb':
# Gemfile group :development do gem "annotaterb", "~> 4.18" end
luego en consola:
bundle install
bundle exec rails g annotate_rb:install
y finalmente:
bundle exec annotaterb models
ya con eso funcionó:
Esteban Ramos Fernández
Excelente clase, me parece genial la idea de documentar los modelos para que se especifiquen los atributos, me queda la duda si al migrar se agregan de forma automática esa docs, tendré que probar.
Emerson Espinoza Aguirre
Si les sale error cuando hacen
rails g simple_form:install --bootstrap
es por que primero se tiene que generar la base de datos
rails db:create
ahora si vuelvan a generar para evitar el error caso contrario a seguir buscando la solución
Mateo Del Rio Usma
Al ejectutar el comando rails db:migrate me arroja el siguiente error. Alguien me puede ayudar?
rails aborted!
ActiveRecord::NoDatabaseError: FATAL: no existe la base de datos «proyectorganizador_development»
/home/mateo/coding/platzi/proyectorganizador/bin/rails:9:in <top (required)>' /home/mateo/coding/platzi/proyectorganizador/bin/spring:15:in <top (required)>'
bin/rails:3:in load' bin/rails:3:in <main>'
Caused by:
PG::ConnectionBad: FATAL: no existe la base de datos «proyectorganizador_development»
/home/mateo/coding/platzi/proyectorganizador/bin/rails:9:in <top (required)>' /home/mateo/coding/platzi/proyectorganizador/bin/spring:15:in <top (required)>'
bin/rails:3:in load' bin/rails:3:in <main>'
Tasks: TOP => db:migrate
(See full trace by running task with --trace)
Pavel Sumano Ortega
rails db:create
Lautaro García
Jesus Junior Campos Vargas
Me sale esto cuando pongo annotate --models
Usage: annotate imagein.jpg imageout.jpg Standard input should consist of lines in the following formats: color r g b (0-255 each) [a (0-127, 0 is opaque)] font fontname size pointsize align (left|right|center) move x y text actual-output-text If the file 'paris.ttf' exists in /usr/share/fonts/truetype or in a location specified in the GDFONTPATH environment variable, 'font paris' is sufficient. You may also specify the full, rooted path of a font file.
Lina Paola Soler Franco
a mi me pasó eso, asi que usé: bundle exec annotate --models y funcionó
Víctor de Jesús Pacheco Padilla
IMPORTANTE: Si al momento de ejecutar el comando rails db:migrate te marca el error "ActiveRecord::NoDatabaseError: FATAL: database "organizador_development" does not exist"
Se arregla ejecutando antes el comando:
rails db:create
y en seguida ahora sí ejecutar rails db:migrate
o si te quieres ahorrar ambos pasos, ejecutas
rails db:setup
Espero que les sirva este tip! ;)
Santiago Patiño Montes
Hermano, me has salvado <3
Luis Mahecha
Buenas tardes por favor si alguien me puede brindar información al respecto:
Tengo un proyecto en Ruby ya conectado a Postgresql, pero estoy replicando el proyecto del curso de Ruby que imparte platzi, para mejorar mi logica y entender mejor, pero no se como conectar otra base de datos, a este proyecto, no se si deba crear , otro usuario o lo que debo hacer, lo unico es que cuando ejecuto rails db:migrate me sale este mensaje por consola: ActiveRecord::ConnectionNotEstablished: FATAL: password authentication failed for user "fercho" FATAL: password authentication failed for user "fercho", por favor si pudiran colaborarme con informacion al respecto sobre que podria hacer, o que estoy haciendo mal. gracias
Agustina Corvo
Hola Luis, intentaste las sugerencias que se hacen en las respuestas a esta pregunta? https://platzi.com/comentario/1630029/
Espero que con eso logres solucionarlo, saludos!
Gonzalo Peñaranda
Buenas noches a todos.
A alguien más le salió este error?
Abner Alejandro Nicolás Recinos
Si pero se soluciono antes de migrar (rails db:migrate), debe crearse la base de datos con el comando:
rails db:create
Aquí te dejo el enlace: https://www.muylinux.com/2018/07/09/configurar-postgresql-ruby-on-rails/
Añaqui Apolinar Morales
Si no me carga ningun estilo, donde puedo verificar que los este cargando ?
Si el commando annotate --models les genera el siguiente error:
Trying to register Bundler::GemfileError for status code 4 but Bundler::GemfileError is already registered (ArgumentError)
Hagan el siguiente comando.
bundle exec annotate --models
Al momento de generarlas, no, es decir al momento de generar el archivo. Al momento de ejecutarlas, sí. Una vez que tienes bien la configuración de la base de datos en database.yml puedes pedirle a rails que la cree por ti:
rails db:create
Y posteriormente:
rails db:migrate
Como dato extra, puedes hacer ambos pasos con:
rails db:setup
Si quieres tener más información sobre qué puedes hacer con el comando rails, puedes ejecutar el siguiente comando para obtener una lista:
rails -T
Hola Anibal, este es un error frecuente que dependerá de la condiguración de roles y permisos de postgresql, dependiendo de tu sistema operativo y preferencias, asimismo deberás configurar tu servidor de base de datos.
Si estás en Linux, puedes ir a la clase 4 y buscar la sección Instalando el ambiente de desarrollo con Rails y PostgreSQL allí creamos un usuario de nombre platzi con contraseña platzi
Si estas en Mac, deberás ir a la clase 5 y también buscar la sección Instalando el ambiente de desarrollo con Rails y PostgreSQL cuya configuración de usuarios plantea otro método de generación de los usuarios
Si estás en windows, en la misma clase, pero alfinal también encontrarás la misma sección Instalando el ambiente de desarrollo con Rails y PostgreSQL sólo que para este sistema operativo lo mencionado en la clase es que uses el sistema de instalación paso a paso del ejecutable que descargas en la página oficial . en esta sección menciona que debes tener cuidado porque en el proceso del paso a paso se te pedirá que ingreses un usuario y una contraseña, en nuestro caso seguiremos usando platzi como usuario y contraseña.
Debes tener cuidado con el enfoque de roles y usuarios en Postgresql, y con cualquier base de datos en realidad..., son estas configuraciones las que permitirán la interación real con el servidor, cuando usas el comando rails db:migrate debes tener antes creada tu base de datos, lo que se podria resolver de varias formas:
creando la base de datos primero desde el mundo de rails rails db:create esto asume que tu usuario de base datos previamente configurado tiene el permiso para crear bases de datos
creas el usuario y la base de datos directo desde la consola de la base de datos
Ten en cuenta que rails maneja dos ambientes de desarrollo por defecto inicialmente: development y test y cada uno necesita una base de datos diferente, por lo que es aconsejable que en el periodo de aprendizaje trabajemos con la opción de tener un usuario con un rol capaz de crear bases de datos y deleguemos los procesos de creación a rails y sus tareas/comandos
NOTA: si bien no es necesario, si estás trabajando con windows, podrías darle una revisada al curso de postgresql, en su clase 3 tiene una explicación detallada de la instalación de postgresql en sistemas operativos windows.
Ya lo he solucionado con el siguiente procedimiento: (Estoy usando Ubuntu)
Ejecutar el siguiente comando en la terminal para crear el usuario platzi
$ sudo -u postgres createuser -s platzi
Ejecutar la consola PostgreSQL de la siguiente manera:
$ sudo -u postgres psql
Ahora en la terminal se vera postgres=# indicando que está activa la consola PostgreSQL, se procede a crear una contraseña para el usuario (platzi) creado previamente, mediante el siguiente comando:
postgres=# \password platzi
Ahora debemos ingresar y confirmar la contraseña: platzi. Para finalizar, ingresamos el siguiente comando para salir de la consola PostgreSQL:
postgres=# \q
Para crear la base de datos se utiliza el siguiente comando:
$ rake db:setup
Y finalmente:
$ rails db:migrate
rails db:setup #Crea y migra