SlideShare una empresa de Scribd logo
1 de 21
Generación de Modelos y
Migraciones en Ruby on
Rails
Por: Elicia Córdova
@elioycor
MODELOMODELO
ACTIVE RECORDACTIVE RECORD
Generación del modelo User
> rails generate model User nombre:string email:string
invoke active_record
create db/migrate/[timestamp]_create_users.rb
create app/models/user.rb
invoke test_unit
create test/models/user_test.rb
créate test/fixtures/users.yml
Modelos
Migraciones
El Archivo user.rb
user.rbuser.rb
Archivo de nuestro
objeto de modelo user.
user.rbuser.rb
Archivo de nuestro
objeto de modelo user.
1 class User < ActiveRecord::Base
2 end
El Archivo user.rb
herenciasingular
plural
El Archivo de Migración [timestamp]_create_users.rb
[timestamp]_create_users.rb
Archivo de migración que
servirá para escribir la
estructura de la tabla
users que vamos a crear
en nuestra base de datos.
YYYYMMDDHHMMSS_create_users.rb
1 class CreateUsers < ActiveRecord::Migration
2 def change
3 create_table :users do |t|
4 t.string :nombre
5 t.string :email
6 t.timestamps
7 end
8 end
9 end
plural
El Archivo de Migración [timestamp]_create_users.rb
[timestamp]_create_users.rb
Proporcionan una manera de
alterar la estructura de la
base de datos
incrementalmente, de
manera que nuestro modelo
de datos puede adaptarse a
los requisitos cambiantes.
created_at
update_at
1 class CreateUsers < ActiveRecord::Migration
2 def change
3 create_table :users do |t|
4 t.string :nombre
5 t.string :email
6 t.timestamps
7 end
8 end
9 end
El Archivo de Migración [timestamp]_create_users.rb
[timestamp]_create_users.rb
Proporcionan una manera de
alterar la estructura de la
base de datos
incrementalmente, de
manera que nuestro modelo
de datos puede adaptarse a
los requisitos cambiantes.
Campo creado para la
clave primaria de la
Tabla
Correr migraciones
> bundle exec rake db:migrate
== CreateUsers: migrating========================
-- create_table(:users)
-> 0.0021s
== CreateUsers: migrated (0.0024s)
Migraciones
CRUD para el modelo User
$ rails console --sandbox
Loading development environment in sandbox (Rails 4.0.2)
Any modifications you make will be rolled back on exit
> user=User.new
=> #<User id: nil, nombre: nil, email: nil, created_at: nil, updated_at: nil>
> user.nombre= "Elicia Cordova"
> user.email="elicia_cor@hotmail.com"
> user.save
=> true
> user
=> #<User id: 1, nombre: “Elicia Cordova”, email: “elicia_cor@hotmail.com”, created_at:
"2014-02-16 00:57:40", updated_at: "2014-02-16 00:57:40">
> user = User.new(nombre: "Maria Gonzales", email: "maria@hotmail.com")
=> #<User id: nil, nombre "Maria Gonzales", email: "maria@hotmail.com", created_at: nil,
updated_at: nil>
> user.save
=> true
> user
=> #<User id: 2, nombre: "Maria Gonzales", email: "maria@hotmail.com", created_at: "2014-
02-16 00:57:46", updated_at: "2014-02-16 00:57:46">
CREAR
CRUD para el modelo User
> User.create(nombre: "Michael Acuña", email: "michi@hotmail.com")
=> #<User id: 3, nombre: "Michael Acuña", email: " michi@hotmail.com ",
created_at: "2014-02-16 00:57:48", updated_at: "2014-02-16 00:57:48>
> foo = User.create(nombre: "Foo", email: "foo@bar.com")
=> #<User id: 4, nombre: "Foo", email: "foo@bar.com", created_at: "2014-02-16 00:57:50",
updated_at: "2014-02-16 00:57:50>
CREAR
> User.find(1)
=> #<User id: 1, nombre: “Elicia Cordova”, email: “elicia_cor@hotmail.com”, created_at:
"2014-02-16 00:57:40", updated_at: "2014-02-16 00:57:40">
> User.find_by_email("elicia_cor@hotmail.com ")
=> #<User id: 1, nombre: “Elicia Cordova”, email: “elicia_cor@hotmail.com”, created_at:
"2014-02-16 00:57:40", updated_at: "2014-02-16 00:57:40">
> User.find_by(email: " elicia_cor@hotmail.com ")
=> #<User id: 1, nombre: “Elicia Cordova”, email: “elicia_cor@hotmail.com”, created_at:
"2014-02-16 00:57:40", updated_at: "2014-02-16 00:57:40">
> User.first
=> #<User id: 1, nombre: “Elicia Cordova”, email: “elicia_cor@hotmail.com”, created_at:
"2014-02-16 00:57:40", updated_at: "2014-02-16 00:57:40">
> User.all
=> [#<User id: 1, nombre: “Elicia Cordova”, email: “elicia_cor@hotmail.com”, created_at:
"2014-02-16 00:57:40", updated_at: "2014-02-16 00:57:40">, #<User id: 2, nombre: "Maria
Gonzales", email: "maria@hotmail.com", created_at: "2014-02-16 00:57:46", updated_at:
"2014-02-16 00:57:46">, #<User id: 3, nombre: "Michael Acuña", email: " michi@hotmail.com
", created_at: "2014-02-16 00:57:48", updated_at: "2014-02-16 00:57:48>, #<User id: 4,
nombre: "Foo", email: "foo@bar.com", created_at: "2014-02-16 00:57:50", updated_at: "2014-
02-16 00:57:50>]
READ
> user=User.find(1)
=> #<User id: 1, nombre: “Elicia Cordova”, email: “elicia_cor@hotmail.com”,
created_at: "2014-02-16 00:57:40", updated_at: "2014-02-16 00:57:40">
> user.email = "elicia.cor@gmail.com"
=> "elicia.cor@gmail.com"
> user.save
=> true
> user.created_at
=> "2014-02-16 00:57:40"
> user.updated_at
=> "2014-02-16 00:59:20"
> user.update_attributes(nombre: "Mayra Villanueva", email: "mayra@hotmail.com")
=> true
> user.nombre
=> " Mayra Villanueva "
> user.email
=> "mayra@hotmail.com"
UPDATE
> foo=User.find(3)
=> #<User id: 3, nombre: "Michael Acuña", email: " michi@hotmail.com ",
created_at: "2014-02-16 00:57:48", updated_at: "2014-02-16 00:57:48>
> foo.destroy
> User.destroy_all
DROP
1 class User < ActiveRecord::Base
2
3
4 end
Validando usuario
validates :nombre, presence: true
> user = User.new(nombre:"", email:"")
=> #<User id: nil, nombre:"", email:"",
created_at: nil, updated_at: nil>
> user.save
=> false
> user.valid?
=> false
> user.errors.full_messages
=> ["Nombre can't be blank", "Email can't be
blank"]
validates :email, presence: true
Validando tamaño
length: { maximum: 5 }
> user = User.new(nombre: "Elicia de los Angeles", email:
"elicia_cor@hotmail.com")
=> #<User id: nil, nombre: " Elicia de los Angeles ", email: "
elicia_cor@hotmail.com ", created_at: nil, updated_at: nil>
> user.valid?
=> false
> user.errors.full_messages
=> ["Nombre is too long (maximum is 5 characters)”]
1 class User < ActiveRecord::Base
2
3
4 end
validates :nombre, presence: true,
validates :email, presence: true
Validando formato
length: { maximum: 5 }
> user = User.new(nombre: "Eli", email: "elicia_cor")
=> #<User id: nil, nombre: " Eli", email: " elicia_cor", created_at:
nil, updated_at: nil>
> user.valid?
=> false
> user.errors.full_messages
=> ["Email is invalid”]
1 class User < ActiveRecord::Base
2
3
4
5 end
validates :nombre, presence: true,
validates :email, presence: true
VALID_EMAIL_REGEX = /A[w+-.]+@[a-zd-.]+.[a-z]+z/i
, format: { with:VALID_EMAIL_REGEX }
Validando formato
length: { maximum: 5 }
> user = User.new(nombre: "Eli", email: "elicia_cor")
=> #<User id: nil, nombre: " Eli", email: " elicia_cor", created_at:
nil, updated_at: nil>
> user.valid?
=> false
> user.errors.full_messages
=> ["Email is invalid”]
1 class User < ActiveRecord::Base
2
3
4
5 end
validates :nombre, presence: true,
validates :email, presence: true
VALID_EMAIL_REGEX = /A[w+-.]+@[a-zd-.]+.[a-z]+z/i
, format: { with:VALID_EMAIL_REGEX }
/A[w+-.]+@[a-zd-.]+.[a-z]+z/i
@devcodela /devcode.la +devcode.la

Más contenido relacionado

Destacado

Manual config resoluc_inc_v1 0
Manual config resoluc_inc_v1 0Manual config resoluc_inc_v1 0
Manual config resoluc_inc_v1 0
Galvi Yanez
 
Fundamentos de Django: Mini curso gratuito
Fundamentos de Django: Mini curso gratuitoFundamentos de Django: Mini curso gratuito
Fundamentos de Django: Mini curso gratuito
DevCode
 
Django avanzado: Dia 2
Django avanzado: Dia 2Django avanzado: Dia 2
Django avanzado: Dia 2
Esau Rodriguez
 
Introduccion a Django
Introduccion a DjangoIntroduccion a Django
Introduccion a Django
jjdelc
 
The Original Hacker número 9.
The Original Hacker número 9.The Original Hacker número 9.
The Original Hacker número 9.
Huehue 1
 

Destacado (20)

Dia2
Dia2Dia2
Dia2
 
Django - Curso Básico - Principales Conceptos
Django - Curso Básico - Principales ConceptosDjango - Curso Básico - Principales Conceptos
Django - Curso Básico - Principales Conceptos
 
Django
DjangoDjango
Django
 
Django Avanzado: Dia3
Django Avanzado: Dia3Django Avanzado: Dia3
Django Avanzado: Dia3
 
Manual config resoluc_inc_v1 0
Manual config resoluc_inc_v1 0Manual config resoluc_inc_v1 0
Manual config resoluc_inc_v1 0
 
Fundamentos de Django: Mini curso gratuito
Fundamentos de Django: Mini curso gratuitoFundamentos de Django: Mini curso gratuito
Fundamentos de Django: Mini curso gratuito
 
Django avanzado: Dia4
Django avanzado: Dia4Django avanzado: Dia4
Django avanzado: Dia4
 
Manual de usuario crud django
Manual de usuario crud djangoManual de usuario crud django
Manual de usuario crud django
 
Dia1
Dia1Dia1
Dia1
 
Django avanzado: Dia 2
Django avanzado: Dia 2Django avanzado: Dia 2
Django avanzado: Dia 2
 
Django
DjangoDjango
Django
 
Introduccion a Django
Introduccion a DjangoIntroduccion a Django
Introduccion a Django
 
A Few of My Favorite (Python) Things
A Few of My Favorite (Python) ThingsA Few of My Favorite (Python) Things
A Few of My Favorite (Python) Things
 
Python Dominicana 059: Django Migrations
Python Dominicana 059: Django MigrationsPython Dominicana 059: Django Migrations
Python Dominicana 059: Django Migrations
 
Taller de introducción al desarrollo web con Django
Taller de introducción al desarrollo web con DjangoTaller de introducción al desarrollo web con Django
Taller de introducción al desarrollo web con Django
 
Usando Django con Docker
Usando Django con DockerUsando Django con Docker
Usando Django con Docker
 
Python django
Python djangoPython django
Python django
 
The Original Hacker número 9.
The Original Hacker número 9.The Original Hacker número 9.
The Original Hacker número 9.
 
Django avanzado: Dia1
Django avanzado: Dia1Django avanzado: Dia1
Django avanzado: Dia1
 
Desarrollo web ágil con Python y Django
Desarrollo web ágil con Python y DjangoDesarrollo web ágil con Python y Django
Desarrollo web ágil con Python y Django
 

Similar a Modelos y Migraciones en Ruby on Rails

Active directory
Active directoryActive directory
Active directory
juanan10
 
Php y my sql con manejo de sesiones
Php y my sql con manejo de sesionesPhp y my sql con manejo de sesiones
Php y my sql con manejo de sesiones
capo1988
 
Informe grupal f_arinango_ cuenca
Informe grupal f_arinango_ cuencaInforme grupal f_arinango_ cuenca
Informe grupal f_arinango_ cuenca
paulcuenca9
 

Similar a Modelos y Migraciones en Ruby on Rails (20)

Introducción a DJango
Introducción a DJangoIntroducción a DJango
Introducción a DJango
 
Cuentas de usuario
Cuentas de usuarioCuentas de usuario
Cuentas de usuario
 
Cuentas de usuario
Cuentas de usuarioCuentas de usuario
Cuentas de usuario
 
Perfiles de usuario Windows Server 2008
Perfiles de usuario Windows Server 2008Perfiles de usuario Windows Server 2008
Perfiles de usuario Windows Server 2008
 
Splat - Programador PHP
Splat - Programador PHPSplat - Programador PHP
Splat - Programador PHP
 
Php Bitter Sweet Symfony!
Php Bitter Sweet Symfony!Php Bitter Sweet Symfony!
Php Bitter Sweet Symfony!
 
Active directory
Active directoryActive directory
Active directory
 
Active directory
Active directoryActive directory
Active directory
 
No-SQL Databases
No-SQL DatabasesNo-SQL Databases
No-SQL Databases
 
Esquemas de seguridad para el servidor
Esquemas de seguridad para el servidorEsquemas de seguridad para el servidor
Esquemas de seguridad para el servidor
 
la mejor forma de Conectar c# con mysql con archivos de configuracion
 la mejor forma de Conectar c# con mysql con archivos de configuracion  la mejor forma de Conectar c# con mysql con archivos de configuracion
la mejor forma de Conectar c# con mysql con archivos de configuracion
 
Active directory
Active directoryActive directory
Active directory
 
Iniciando el front end
Iniciando el front endIniciando el front end
Iniciando el front end
 
06. Creando un proceso web worker
06. Creando un proceso web worker 06. Creando un proceso web worker
06. Creando un proceso web worker
 
Php y my sql con manejo de sesiones
Php y my sql con manejo de sesionesPhp y my sql con manejo de sesiones
Php y my sql con manejo de sesiones
 
Informe grupal f_arinango_ cuenca
Informe grupal f_arinango_ cuencaInforme grupal f_arinango_ cuenca
Informe grupal f_arinango_ cuenca
 
EXAMEN
EXAMENEXAMEN
EXAMEN
 
Funciones
FuncionesFunciones
Funciones
 
Base de datos dinamicas
Base de datos dinamicasBase de datos dinamicas
Base de datos dinamicas
 
Practica 4 de apache
Practica 4 de apachePractica 4 de apache
Practica 4 de apache
 

Último

redes informaticas en una oficina administrativa
redes informaticas en una oficina administrativaredes informaticas en una oficina administrativa
redes informaticas en una oficina administrativa
nicho110
 

Último (10)

Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21
 
Buenos_Aires_Meetup_Redis_20240430_.pptx
Buenos_Aires_Meetup_Redis_20240430_.pptxBuenos_Aires_Meetup_Redis_20240430_.pptx
Buenos_Aires_Meetup_Redis_20240430_.pptx
 
investigación de los Avances tecnológicos del siglo XXI
investigación de los Avances tecnológicos del siglo XXIinvestigación de los Avances tecnológicos del siglo XXI
investigación de los Avances tecnológicos del siglo XXI
 
Avances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanaAvances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvana
 
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptxEVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
 
redes informaticas en una oficina administrativa
redes informaticas en una oficina administrativaredes informaticas en una oficina administrativa
redes informaticas en una oficina administrativa
 
How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.
 
Guia Basica para bachillerato de Circuitos Basicos
Guia Basica para bachillerato de Circuitos BasicosGuia Basica para bachillerato de Circuitos Basicos
Guia Basica para bachillerato de Circuitos Basicos
 
Avances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estosAvances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estos
 
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
 

Modelos y Migraciones en Ruby on Rails

  • 1. Generación de Modelos y Migraciones en Ruby on Rails Por: Elicia Córdova @elioycor
  • 4.
  • 5. Generación del modelo User > rails generate model User nombre:string email:string invoke active_record create db/migrate/[timestamp]_create_users.rb create app/models/user.rb invoke test_unit create test/models/user_test.rb créate test/fixtures/users.yml Modelos Migraciones
  • 6. El Archivo user.rb user.rbuser.rb Archivo de nuestro objeto de modelo user.
  • 7. user.rbuser.rb Archivo de nuestro objeto de modelo user. 1 class User < ActiveRecord::Base 2 end El Archivo user.rb herenciasingular plural
  • 8. El Archivo de Migración [timestamp]_create_users.rb [timestamp]_create_users.rb Archivo de migración que servirá para escribir la estructura de la tabla users que vamos a crear en nuestra base de datos. YYYYMMDDHHMMSS_create_users.rb
  • 9. 1 class CreateUsers < ActiveRecord::Migration 2 def change 3 create_table :users do |t| 4 t.string :nombre 5 t.string :email 6 t.timestamps 7 end 8 end 9 end plural El Archivo de Migración [timestamp]_create_users.rb [timestamp]_create_users.rb Proporcionan una manera de alterar la estructura de la base de datos incrementalmente, de manera que nuestro modelo de datos puede adaptarse a los requisitos cambiantes. created_at update_at
  • 10. 1 class CreateUsers < ActiveRecord::Migration 2 def change 3 create_table :users do |t| 4 t.string :nombre 5 t.string :email 6 t.timestamps 7 end 8 end 9 end El Archivo de Migración [timestamp]_create_users.rb [timestamp]_create_users.rb Proporcionan una manera de alterar la estructura de la base de datos incrementalmente, de manera que nuestro modelo de datos puede adaptarse a los requisitos cambiantes. Campo creado para la clave primaria de la Tabla
  • 11. Correr migraciones > bundle exec rake db:migrate == CreateUsers: migrating======================== -- create_table(:users) -> 0.0021s == CreateUsers: migrated (0.0024s) Migraciones
  • 12. CRUD para el modelo User $ rails console --sandbox Loading development environment in sandbox (Rails 4.0.2) Any modifications you make will be rolled back on exit > user=User.new => #<User id: nil, nombre: nil, email: nil, created_at: nil, updated_at: nil> > user.nombre= "Elicia Cordova" > user.email="elicia_cor@hotmail.com" > user.save => true > user => #<User id: 1, nombre: “Elicia Cordova”, email: “elicia_cor@hotmail.com”, created_at: "2014-02-16 00:57:40", updated_at: "2014-02-16 00:57:40"> > user = User.new(nombre: "Maria Gonzales", email: "maria@hotmail.com") => #<User id: nil, nombre "Maria Gonzales", email: "maria@hotmail.com", created_at: nil, updated_at: nil> > user.save => true > user => #<User id: 2, nombre: "Maria Gonzales", email: "maria@hotmail.com", created_at: "2014- 02-16 00:57:46", updated_at: "2014-02-16 00:57:46"> CREAR
  • 13. CRUD para el modelo User > User.create(nombre: "Michael Acuña", email: "michi@hotmail.com") => #<User id: 3, nombre: "Michael Acuña", email: " michi@hotmail.com ", created_at: "2014-02-16 00:57:48", updated_at: "2014-02-16 00:57:48> > foo = User.create(nombre: "Foo", email: "foo@bar.com") => #<User id: 4, nombre: "Foo", email: "foo@bar.com", created_at: "2014-02-16 00:57:50", updated_at: "2014-02-16 00:57:50> CREAR
  • 14. > User.find(1) => #<User id: 1, nombre: “Elicia Cordova”, email: “elicia_cor@hotmail.com”, created_at: "2014-02-16 00:57:40", updated_at: "2014-02-16 00:57:40"> > User.find_by_email("elicia_cor@hotmail.com ") => #<User id: 1, nombre: “Elicia Cordova”, email: “elicia_cor@hotmail.com”, created_at: "2014-02-16 00:57:40", updated_at: "2014-02-16 00:57:40"> > User.find_by(email: " elicia_cor@hotmail.com ") => #<User id: 1, nombre: “Elicia Cordova”, email: “elicia_cor@hotmail.com”, created_at: "2014-02-16 00:57:40", updated_at: "2014-02-16 00:57:40"> > User.first => #<User id: 1, nombre: “Elicia Cordova”, email: “elicia_cor@hotmail.com”, created_at: "2014-02-16 00:57:40", updated_at: "2014-02-16 00:57:40"> > User.all => [#<User id: 1, nombre: “Elicia Cordova”, email: “elicia_cor@hotmail.com”, created_at: "2014-02-16 00:57:40", updated_at: "2014-02-16 00:57:40">, #<User id: 2, nombre: "Maria Gonzales", email: "maria@hotmail.com", created_at: "2014-02-16 00:57:46", updated_at: "2014-02-16 00:57:46">, #<User id: 3, nombre: "Michael Acuña", email: " michi@hotmail.com ", created_at: "2014-02-16 00:57:48", updated_at: "2014-02-16 00:57:48>, #<User id: 4, nombre: "Foo", email: "foo@bar.com", created_at: "2014-02-16 00:57:50", updated_at: "2014- 02-16 00:57:50>] READ
  • 15. > user=User.find(1) => #<User id: 1, nombre: “Elicia Cordova”, email: “elicia_cor@hotmail.com”, created_at: "2014-02-16 00:57:40", updated_at: "2014-02-16 00:57:40"> > user.email = "elicia.cor@gmail.com" => "elicia.cor@gmail.com" > user.save => true > user.created_at => "2014-02-16 00:57:40" > user.updated_at => "2014-02-16 00:59:20" > user.update_attributes(nombre: "Mayra Villanueva", email: "mayra@hotmail.com") => true > user.nombre => " Mayra Villanueva " > user.email => "mayra@hotmail.com" UPDATE
  • 16. > foo=User.find(3) => #<User id: 3, nombre: "Michael Acuña", email: " michi@hotmail.com ", created_at: "2014-02-16 00:57:48", updated_at: "2014-02-16 00:57:48> > foo.destroy > User.destroy_all DROP
  • 17. 1 class User < ActiveRecord::Base 2 3 4 end Validando usuario validates :nombre, presence: true > user = User.new(nombre:"", email:"") => #<User id: nil, nombre:"", email:"", created_at: nil, updated_at: nil> > user.save => false > user.valid? => false > user.errors.full_messages => ["Nombre can't be blank", "Email can't be blank"] validates :email, presence: true
  • 18. Validando tamaño length: { maximum: 5 } > user = User.new(nombre: "Elicia de los Angeles", email: "elicia_cor@hotmail.com") => #<User id: nil, nombre: " Elicia de los Angeles ", email: " elicia_cor@hotmail.com ", created_at: nil, updated_at: nil> > user.valid? => false > user.errors.full_messages => ["Nombre is too long (maximum is 5 characters)”] 1 class User < ActiveRecord::Base 2 3 4 end validates :nombre, presence: true, validates :email, presence: true
  • 19. Validando formato length: { maximum: 5 } > user = User.new(nombre: "Eli", email: "elicia_cor") => #<User id: nil, nombre: " Eli", email: " elicia_cor", created_at: nil, updated_at: nil> > user.valid? => false > user.errors.full_messages => ["Email is invalid”] 1 class User < ActiveRecord::Base 2 3 4 5 end validates :nombre, presence: true, validates :email, presence: true VALID_EMAIL_REGEX = /A[w+-.]+@[a-zd-.]+.[a-z]+z/i , format: { with:VALID_EMAIL_REGEX }
  • 20. Validando formato length: { maximum: 5 } > user = User.new(nombre: "Eli", email: "elicia_cor") => #<User id: nil, nombre: " Eli", email: " elicia_cor", created_at: nil, updated_at: nil> > user.valid? => false > user.errors.full_messages => ["Email is invalid”] 1 class User < ActiveRecord::Base 2 3 4 5 end validates :nombre, presence: true, validates :email, presence: true VALID_EMAIL_REGEX = /A[w+-.]+@[a-zd-.]+.[a-z]+z/i , format: { with:VALID_EMAIL_REGEX } /A[w+-.]+@[a-zd-.]+.[a-z]+z/i