SlideShare una empresa de Scribd logo
1 de 12
Descargar para leer sin conexión
1
Curso Ruby On Rails
Antes de iniciar a trabajar con Rails debemos indicarle la pronunciación de singular y plural del
nombrado de nuestras tablas (todo en minusculas):
Por ejemplo:
alumnos -> alumnos
Imaginemos que no hacemos esta declaración y manejaremos la tabla direcciones, entonces Rails
tomara como singular direccione, esto no ocasiona problemas alguno, pero es un poco incomodo
trabajar con este nombre de variables que son poco descriptivas y difíciles de recordar.
Para el caso de alumnos no habría problemas si no se declara ya que el singular sera alumno, pero
es mejor mantener esta practica para evitar problemas.
Agregamos el nombre de todos lo modelos a utilizar.
# config/initializers/infections.rb
ActiveSupport::Inflector.inflections do |inflect|
inflect.irregular 'alumno', 'alumnos'
inflect.irregular 'carrera', 'carreras'
inflect.irregular 'materia', 'materias'
inflect.irregular 'direcion', 'direciones'
inflect.irregular 'profesor', 'profesores'
inflect.irregular 'salon', 'salones'
inflect.irregular 'periodo', 'periodos'
end
2
Esta sera la base de datos con la que trabajaremos, la cual crearemos con la ayuda de
Scaffold.
Para realizar este ejercicio es necesario que la base de datos
NO TENGA ninguna tabla.
Para limpiar tu Base de datos
1. Elimina todas las tablas
2. Ejecuta las siguientes instrucciones en la terminal (para eliminar archivos creados
por scaffold)
rails d scaffold carreras
rails d scaffold profesores
rails d scaffold salones
rails d scaffold periodos
rails d scaffold materias
rails d scaffold alumno_materias
rails d scaffold alumnos
3
Creación de sacffold
Para generar los modelos y las tablas de base de datos, vamos a ejecutar las siguientes instrucciones, con
la consola de ruby (Ejecuta lina por linea)
rails g scaffold carreras carrera:string nomenclatura:string
rake db:migrate
rails g scaffold profesores carrera:references profesor:string
rake db:migrate
rails g scaffold salones salon:string
rake db:migrate
rails g scaffold periodos periodo:string
rake db:migrate
rails g scaffold materias periodo:references carrera:references profesor:references salon:references
materia:string creditos:integer creditos_min:integer semestre:integer
rake db:migrate
rails g scaffold alumnos carrera:references nombre:string apellido_p:string apellido_m:string
no_control:string semestre:integer
rake db:migrate
rails g model alumno_materias alumno:references materia:references semestre:integer calificacion:float
rake db:migrate
--- En linux:
bin/rake db:migrate RAILS_ENV=development
--- En Windows
rake db:migrate RAILS_ENV=development
Esto nos generara los archivos necesarios para poder realizar CRUD para cada scaffold creado, ahora se
deberán de modificar los formularios (_form.html.erb), se reemplazaran los f.text_field por
f.collection_select, para que en lugar de que muestre un input para introducir la carrear, nos aparezca
una lista desplegable con las carreras para seleccionar:
# Ejemplos de reemplazo en el archivo _form.html.erb de profesores
<%= f.text_field :carrera_id %>
<%= f.collection_select(:carrera_id, Profesor.all, :id, :profesor) %>
# Se reemplazara para los datos que pertenecen a llaves foraneas.
Y realizamos lo mismo con el resto de los formularios.
4
También eliminamos los satos de linea <br> (Para que no quede tan separado, cuando apliquemos
skeleton.css mas adelante), esto en todo el formulario.
<div class="field">
<%= f.label :profesor %><br>
<%= f.text_field :profesor %>
</div>
5
Agregando validaciones
Las solución anterior funciona, pero es hora de agregar algunas validaciones para antes de guardar la
información.
Validaciones a considerar:
● EL nombre debe tener mínimo 3 caracteres y un máximo de 50
● El apellido paterno es requerido
● El no_control
■ debe ser único
■ Solo se admiten numero (aun que el campo en bd es string)
■ Se compone de 8 números
Para lo cual nos vamos a la carpeta de modelos, y abrimos el archivo de alumno.rb
Y agregamos las validaciones (de paso, las relaciones y un método privado):
class Alumno < ActiveRecord::Base
# Relación con la tabla carreras y materias
belongs_to :carrera
has_many :Materias, :class_name => "AlumnoMateria", :foreign_key => "alumno_id"
# Validaciones
validates :nombre, length: { in: 3..50 , message: " debe tener minimo 3 caracteres"}
validates :apellido_p, presence: { message: "Escribe el apellido paterno" }
validates :no_control, uniqueness: {message: "ya se encuentra registrado"}
validates :no_control, length: { is: 8, message: "Debe tener 8 caracteres" } #17590063
validates :no_control, numericality: {message: "Solo se admiten numeros"}
# Metodo privado, para recuperar el nombre completo del alumno
def nombre_completo
self.nombre + " " + self.apellido_p + " " + self.apellido_m
end
def materias_cursando
self.Materias.where("alumno_materias.semestre = #{self.semestre}")
end
def materias_x_cursar
# La siguiente consulta puede generar las siguientes consultas
# SELECT `materias`.* FROM `materias` WHERE (`materias`.`id` NOT IN (2, 3))
# SELECT `materias`.* FROM `materias` WHERE (`materias`.`id` != 2)
Materia.where.not( id: self.Materias.map { |m| m.materia_id } )
end
End
6
Las validaciones se ejecutaran tanto para los
nuevos registros como para las
actualizaciones.
Una vez ejecutado y modificado lo anterior, debemos agregar datos al sistema en este orden.
http://localhost:3000/periodos
http://localhost:3000/carreras
http://localhost:3000/profesores
http://localhost:3000/salones
http://localhost:3000/materias
http://localhost:3000/alumnos
7
Agregando algo de maquillaje.
Para agregar estilo a la aplicación visual usaremos el fremework http://getskeleton.com/. para lo cual
requerimos de dos archivos normalize.css y skeleton.css
En el archivo: `config/initializers/assets.rb` debemos declarar los archivos css, que
nuestra aplicación utilizara, por seguridad, debemos hacer esto para todos los archivos css y js.
# `config/initializers/assets.rb`
Rails.application.config.assets.version = '1.0'
Rails.application.config.assets.precompile += %w( normalize.css )
Rails.application.config.assets.precompile += %w( skeleton.css )
Después de modificar el archivo, reiniciamos el servidor de rails para que los cambios se vean
reflejados.
Modificamos
<!DOCTYPE html>
<html>
<head>
<title>Curso Rails</title>
<%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track' => true %>
<%= javascript_include_tag 'application', 'data-turbolinks-track' => true %>
<!-- Se incluyen los archivos css de skeleton -->
<%= stylesheet_link_tag 'normalize', media: 'all', 'data-turbolinks-track' => true %>
<%= stylesheet_link_tag 'skeleton', media: 'all', 'data-turbolinks-track' => true %>
<%= csrf_meta_tags %>
</head>
<body>
<!-- container, esta declarada en skeleton.css -->
<div class="container">
<%= yield %>
</div>
</body>
</html>
8
Resultado después de aplicar skeleton.css
9
Relaciones entre Modelos
Como los modelos se crearon mediante scaffold y haciendo referencia a otras tablas,
Rails genera las relaciones a nivel código, por ejemplo para el modelo profesores:
class Profesor < ActiveRecord::Base
belongs_to :carrera
end
Para la dirección: http://localhost:3000/profesores
En la columna carrera nos muestra algo
“raro”, esto es la representación de un
objeto. Para que nos muestre la carrera
debemos modificar:
<%= profesor.carrera%>
Por:
<%= profesor.carrera.carrera %>
profesor. .carrera .carrera
Objeto que se esta
iterando
Nombre de la
relación en
profesores
Nombre de la
columna. En la
tabla carreras
<tbody>
<% @profesores.each do |profesor| %>
<tr>
<td><%= profesor.carrera.carrera %></td>
<td><%= profesor.profesor %></td>
<td><%= link_to 'Show', profesor %></td>
<td><%= link_to 'Edit', edit_profesor_path(profesor) %></td>
<td><%= link_to 'Destroy', profesor, method: :delete, data: { confirm: 'Are you sure?' } %></td>
</tr>
<% end %>
</tbody>
Este cambio se deberá realizar en todos los archivos index.html.erb y show.html.erb
10
Un poco mas allá de las relaciones
Las ultimas dos relaciones, son para recuperar la lista de todos los alumnos, que están
cursando una materia.
La penultima relación es usada para lograr una relación directa, con la tabla, materias ya
alumnos, esta relación sirve de puente.
La ultima relación, source: :alumno indica el origen de datos de la relación, en este caso
los son de la tabla de alumnos.
class Materia < ActiveRecord::Base
belongs_to :periodo
belongs_to :carrera
belongs_to :profesor
belongs_to :salon
# Relaciones adicionales
has_many :AlumnoMaterias, :foreign_key => "materia_id"
has_many :Alumnos, through: :AlumnoMaterias, source: :alumno
end
11
Alumno Materias
Para que funcione este modulo es necesario hacer una modificación en routes.rb
resources :alumnos do
resources :alumno_materias
end
Con esto accedemos desde la url: http://localhost:3000/alumnos/1/alumno_materias/new
Y para ver las materias que esta cursando el alumnos, sera mediante la url:
http://localhost:3000/alumnos/1 modificando el archivo show.html.erb
Del controlador alumno_materias_controller.rb, solo usaremos los métodos: :new, :create
y :destroy.
En la clase, tenemos dos métodos, que antes de ejecutar un metodo, se inicializar la variable
@alumno.
class AlumnoMateriasController < ApplicationController
before_action :set_alumno, only: [:new, :create, :destroy,:update]
before_action :set_alumno_materia, only: [:update, :destroy]
private
# params[:alumno_id] :alumno_id, siempre llegara desde la URL
def set_alumno
@alumno = Alumno.find(params[:alumno_id])
end
# este metodo solo se ejecuta para :update, :destroy
def set_alumno_materia
@alumno_materia = AlumnoMateria.find(params[:id])
end
# Never trust parameters from the scary internet, only allow the white list through.
def alumno_materia_params
params.require(:alumno_materia).permit(:materia_id)
end
end
12
Otros Recursos
http://rubysur.org/introduccion.a.rails/
Te recomiendo hacer la guía
( los dos enlaces tratan de lo mismo, el que mas te acomode)
http://www.guiasrails.es/getting_started.html
http://www.guiasrails.es/active_record_validations.html

Más contenido relacionado

Similar a Curso Ruby On Rails: Creación de modelos y scaffold

Ruby on rails Introducción
Ruby on rails Introducción Ruby on rails Introducción
Ruby on rails Introducción Daryl Moreno
 
Programa en Rails como si Jugases con Lego. Javier Ramirez
Programa en Rails como si Jugases con Lego. Javier RamirezPrograma en Rails como si Jugases con Lego. Javier Ramirez
Programa en Rails como si Jugases con Lego. Javier Ramirezjavier ramirez
 
Javier Ramirez Rails Plugins Pdf
Javier Ramirez Rails Plugins PdfJavier Ramirez Rails Plugins Pdf
Javier Ramirez Rails Plugins Pdfjavier ramirez
 
Rails Plugins. Javier Ramirez
Rails Plugins. Javier RamirezRails Plugins. Javier Ramirez
Rails Plugins. Javier Ramirezjavier ramirez
 
19 Php. Utilizando Formularios
19 Php. Utilizando Formularios19 Php. Utilizando Formularios
19 Php. Utilizando FormulariosJosé M. Padilla
 
Guía PHP Orientado a Objeto con MVC
Guía PHP Orientado a Objeto con MVC Guía PHP Orientado a Objeto con MVC
Guía PHP Orientado a Objeto con MVC lissette_torrealba
 
Introduccion A Php
Introduccion A PhpIntroduccion A Php
Introduccion A Phputs
 
Introduccion A Php
Introduccion A PhpIntroduccion A Php
Introduccion A Phputs
 
Introduccion A Php
Introduccion A PhpIntroduccion A Php
Introduccion A Phputs
 
0139-php-y-mysql-lenguaje-php-basico.pdf
0139-php-y-mysql-lenguaje-php-basico.pdf0139-php-y-mysql-lenguaje-php-basico.pdf
0139-php-y-mysql-lenguaje-php-basico.pdfmiguelalemangonzales1
 
Rails 5 presentation for begginers
Rails 5 presentation for begginersRails 5 presentation for begginers
Rails 5 presentation for begginersEduardo Veras
 
Enrique Place: Introducción a POO / UML / PHP5
Enrique Place: Introducción a POO / UML / PHP5Enrique Place: Introducción a POO / UML / PHP5
Enrique Place: Introducción a POO / UML / PHP5Grupo PHP Argentina
 
Introducción a UML / POO / PHP5
Introducción a UML / POO / PHP5Introducción a UML / POO / PHP5
Introducción a UML / POO / PHP5Enrique Place
 

Similar a Curso Ruby On Rails: Creación de modelos y scaffold (20)

Ruby on rails Introducción
Ruby on rails Introducción Ruby on rails Introducción
Ruby on rails Introducción
 
Programa en Rails como si Jugases con Lego. Javier Ramirez
Programa en Rails como si Jugases con Lego. Javier RamirezPrograma en Rails como si Jugases con Lego. Javier Ramirez
Programa en Rails como si Jugases con Lego. Javier Ramirez
 
Javier Ramirez Rails Plugins Pdf
Javier Ramirez Rails Plugins PdfJavier Ramirez Rails Plugins Pdf
Javier Ramirez Rails Plugins Pdf
 
Rails Plugins. Javier Ramirez
Rails Plugins. Javier RamirezRails Plugins. Javier Ramirez
Rails Plugins. Javier Ramirez
 
19 Php. Utilizando Formularios
19 Php. Utilizando Formularios19 Php. Utilizando Formularios
19 Php. Utilizando Formularios
 
Guía PHP Orientado a Objeto con MVC
Guía PHP Orientado a Objeto con MVC Guía PHP Orientado a Objeto con MVC
Guía PHP Orientado a Objeto con MVC
 
Cronograma
CronogramaCronograma
Cronograma
 
Introduccion A Php
Introduccion A PhpIntroduccion A Php
Introduccion A Php
 
Introduccion A Php
Introduccion A PhpIntroduccion A Php
Introduccion A Php
 
Introduccion A Php
Introduccion A PhpIntroduccion A Php
Introduccion A Php
 
Manual+php+básico
Manual+php+básicoManual+php+básico
Manual+php+básico
 
Introducción a Kohana Framework
Introducción a Kohana FrameworkIntroducción a Kohana Framework
Introducción a Kohana Framework
 
Curso php y_mysql
Curso php y_mysqlCurso php y_mysql
Curso php y_mysql
 
Tema2 3
Tema2 3Tema2 3
Tema2 3
 
0139-php-y-mysql-lenguaje-php-basico.pdf
0139-php-y-mysql-lenguaje-php-basico.pdf0139-php-y-mysql-lenguaje-php-basico.pdf
0139-php-y-mysql-lenguaje-php-basico.pdf
 
Guia poo php
Guia poo phpGuia poo php
Guia poo php
 
Rails 5 presentation for begginers
Rails 5 presentation for begginersRails 5 presentation for begginers
Rails 5 presentation for begginers
 
Enrique Place: Introducción a POO / UML / PHP5
Enrique Place: Introducción a POO / UML / PHP5Enrique Place: Introducción a POO / UML / PHP5
Enrique Place: Introducción a POO / UML / PHP5
 
Introducción a UML / POO / PHP5
Introducción a UML / POO / PHP5Introducción a UML / POO / PHP5
Introducción a UML / POO / PHP5
 
Asp
AspAsp
Asp
 

Más de Govani Sanchez

Instalando wamp soyprogramador.liz.mx
Instalando wamp soyprogramador.liz.mxInstalando wamp soyprogramador.liz.mx
Instalando wamp soyprogramador.liz.mxGovani Sanchez
 
Instalando wamp | soyprogramador.liz.mx
Instalando wamp | soyprogramador.liz.mxInstalando wamp | soyprogramador.liz.mx
Instalando wamp | soyprogramador.liz.mxGovani Sanchez
 
Taller de kumbiaPHP Mexico ITSJR
Taller de kumbiaPHP Mexico ITSJRTaller de kumbiaPHP Mexico ITSJR
Taller de kumbiaPHP Mexico ITSJRGovani Sanchez
 
Postres trio2014 (1) (1)
Postres trio2014 (1) (1)Postres trio2014 (1) (1)
Postres trio2014 (1) (1)Govani Sanchez
 
Menú del Chef Chef Menu TrioPV
Menú del Chef Chef  Menu TrioPVMenú del Chef Chef  Menu TrioPV
Menú del Chef Chef Menu TrioPVGovani Sanchez
 
Menu trio 20 de mayo 2014
Menu trio 20 de mayo 2014Menu trio 20 de mayo 2014
Menu trio 20 de mayo 2014Govani Sanchez
 
Anti stress saludvital.ytv.mx
Anti stress saludvital.ytv.mxAnti stress saludvital.ytv.mx
Anti stress saludvital.ytv.mxGovani Sanchez
 

Más de Govani Sanchez (17)

Instalando wamp soyprogramador.liz.mx
Instalando wamp soyprogramador.liz.mxInstalando wamp soyprogramador.liz.mx
Instalando wamp soyprogramador.liz.mx
 
Instalando wamp
Instalando wampInstalando wamp
Instalando wamp
 
Instalando wamp | soyprogramador.liz.mx
Instalando wamp | soyprogramador.liz.mxInstalando wamp | soyprogramador.liz.mx
Instalando wamp | soyprogramador.liz.mx
 
Web semantica
Web semanticaWeb semantica
Web semantica
 
Taller de kumbiaPHP Mexico ITSJR
Taller de kumbiaPHP Mexico ITSJRTaller de kumbiaPHP Mexico ITSJR
Taller de kumbiaPHP Mexico ITSJR
 
Logo KumbiaPHP
Logo KumbiaPHPLogo KumbiaPHP
Logo KumbiaPHP
 
Postres trio2014 (1) (1)
Postres trio2014 (1) (1)Postres trio2014 (1) (1)
Postres trio2014 (1) (1)
 
Menú del Chef Chef Menu TrioPV
Menú del Chef Chef  Menu TrioPVMenú del Chef Chef  Menu TrioPV
Menú del Chef Chef Menu TrioPV
 
Postres trio2014 (1)
Postres trio2014 (1)Postres trio2014 (1)
Postres trio2014 (1)
 
Lista de bebidas
Lista de bebidasLista de bebidas
Lista de bebidas
 
Lista de vinos Triopv
Lista de vinos TriopvLista de vinos Triopv
Lista de vinos Triopv
 
Menu del chef TrioPV
Menu del chef TrioPVMenu del chef TrioPV
Menu del chef TrioPV
 
Menu trio 20 de mayo 2014
Menu trio 20 de mayo 2014Menu trio 20 de mayo 2014
Menu trio 20 de mayo 2014
 
Menu trio 2014
Menu trio 2014Menu trio 2014
Menu trio 2014
 
MariaDb VS MySql
MariaDb VS MySql MariaDb VS MySql
MariaDb VS MySql
 
Anti stress saludvital.ytv.mx
Anti stress saludvital.ytv.mxAnti stress saludvital.ytv.mx
Anti stress saludvital.ytv.mx
 
Activator spanish
Activator spanishActivator spanish
Activator spanish
 

Curso Ruby On Rails: Creación de modelos y scaffold

  • 1. 1 Curso Ruby On Rails Antes de iniciar a trabajar con Rails debemos indicarle la pronunciación de singular y plural del nombrado de nuestras tablas (todo en minusculas): Por ejemplo: alumnos -> alumnos Imaginemos que no hacemos esta declaración y manejaremos la tabla direcciones, entonces Rails tomara como singular direccione, esto no ocasiona problemas alguno, pero es un poco incomodo trabajar con este nombre de variables que son poco descriptivas y difíciles de recordar. Para el caso de alumnos no habría problemas si no se declara ya que el singular sera alumno, pero es mejor mantener esta practica para evitar problemas. Agregamos el nombre de todos lo modelos a utilizar. # config/initializers/infections.rb ActiveSupport::Inflector.inflections do |inflect| inflect.irregular 'alumno', 'alumnos' inflect.irregular 'carrera', 'carreras' inflect.irregular 'materia', 'materias' inflect.irregular 'direcion', 'direciones' inflect.irregular 'profesor', 'profesores' inflect.irregular 'salon', 'salones' inflect.irregular 'periodo', 'periodos' end
  • 2. 2 Esta sera la base de datos con la que trabajaremos, la cual crearemos con la ayuda de Scaffold. Para realizar este ejercicio es necesario que la base de datos NO TENGA ninguna tabla. Para limpiar tu Base de datos 1. Elimina todas las tablas 2. Ejecuta las siguientes instrucciones en la terminal (para eliminar archivos creados por scaffold) rails d scaffold carreras rails d scaffold profesores rails d scaffold salones rails d scaffold periodos rails d scaffold materias rails d scaffold alumno_materias rails d scaffold alumnos
  • 3. 3 Creación de sacffold Para generar los modelos y las tablas de base de datos, vamos a ejecutar las siguientes instrucciones, con la consola de ruby (Ejecuta lina por linea) rails g scaffold carreras carrera:string nomenclatura:string rake db:migrate rails g scaffold profesores carrera:references profesor:string rake db:migrate rails g scaffold salones salon:string rake db:migrate rails g scaffold periodos periodo:string rake db:migrate rails g scaffold materias periodo:references carrera:references profesor:references salon:references materia:string creditos:integer creditos_min:integer semestre:integer rake db:migrate rails g scaffold alumnos carrera:references nombre:string apellido_p:string apellido_m:string no_control:string semestre:integer rake db:migrate rails g model alumno_materias alumno:references materia:references semestre:integer calificacion:float rake db:migrate --- En linux: bin/rake db:migrate RAILS_ENV=development --- En Windows rake db:migrate RAILS_ENV=development Esto nos generara los archivos necesarios para poder realizar CRUD para cada scaffold creado, ahora se deberán de modificar los formularios (_form.html.erb), se reemplazaran los f.text_field por f.collection_select, para que en lugar de que muestre un input para introducir la carrear, nos aparezca una lista desplegable con las carreras para seleccionar: # Ejemplos de reemplazo en el archivo _form.html.erb de profesores <%= f.text_field :carrera_id %> <%= f.collection_select(:carrera_id, Profesor.all, :id, :profesor) %> # Se reemplazara para los datos que pertenecen a llaves foraneas. Y realizamos lo mismo con el resto de los formularios.
  • 4. 4 También eliminamos los satos de linea <br> (Para que no quede tan separado, cuando apliquemos skeleton.css mas adelante), esto en todo el formulario. <div class="field"> <%= f.label :profesor %><br> <%= f.text_field :profesor %> </div>
  • 5. 5 Agregando validaciones Las solución anterior funciona, pero es hora de agregar algunas validaciones para antes de guardar la información. Validaciones a considerar: ● EL nombre debe tener mínimo 3 caracteres y un máximo de 50 ● El apellido paterno es requerido ● El no_control ■ debe ser único ■ Solo se admiten numero (aun que el campo en bd es string) ■ Se compone de 8 números Para lo cual nos vamos a la carpeta de modelos, y abrimos el archivo de alumno.rb Y agregamos las validaciones (de paso, las relaciones y un método privado): class Alumno < ActiveRecord::Base # Relación con la tabla carreras y materias belongs_to :carrera has_many :Materias, :class_name => "AlumnoMateria", :foreign_key => "alumno_id" # Validaciones validates :nombre, length: { in: 3..50 , message: " debe tener minimo 3 caracteres"} validates :apellido_p, presence: { message: "Escribe el apellido paterno" } validates :no_control, uniqueness: {message: "ya se encuentra registrado"} validates :no_control, length: { is: 8, message: "Debe tener 8 caracteres" } #17590063 validates :no_control, numericality: {message: "Solo se admiten numeros"} # Metodo privado, para recuperar el nombre completo del alumno def nombre_completo self.nombre + " " + self.apellido_p + " " + self.apellido_m end def materias_cursando self.Materias.where("alumno_materias.semestre = #{self.semestre}") end def materias_x_cursar # La siguiente consulta puede generar las siguientes consultas # SELECT `materias`.* FROM `materias` WHERE (`materias`.`id` NOT IN (2, 3)) # SELECT `materias`.* FROM `materias` WHERE (`materias`.`id` != 2) Materia.where.not( id: self.Materias.map { |m| m.materia_id } ) end End
  • 6. 6 Las validaciones se ejecutaran tanto para los nuevos registros como para las actualizaciones. Una vez ejecutado y modificado lo anterior, debemos agregar datos al sistema en este orden. http://localhost:3000/periodos http://localhost:3000/carreras http://localhost:3000/profesores http://localhost:3000/salones http://localhost:3000/materias http://localhost:3000/alumnos
  • 7. 7 Agregando algo de maquillaje. Para agregar estilo a la aplicación visual usaremos el fremework http://getskeleton.com/. para lo cual requerimos de dos archivos normalize.css y skeleton.css En el archivo: `config/initializers/assets.rb` debemos declarar los archivos css, que nuestra aplicación utilizara, por seguridad, debemos hacer esto para todos los archivos css y js. # `config/initializers/assets.rb` Rails.application.config.assets.version = '1.0' Rails.application.config.assets.precompile += %w( normalize.css ) Rails.application.config.assets.precompile += %w( skeleton.css ) Después de modificar el archivo, reiniciamos el servidor de rails para que los cambios se vean reflejados. Modificamos <!DOCTYPE html> <html> <head> <title>Curso Rails</title> <%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track' => true %> <%= javascript_include_tag 'application', 'data-turbolinks-track' => true %> <!-- Se incluyen los archivos css de skeleton --> <%= stylesheet_link_tag 'normalize', media: 'all', 'data-turbolinks-track' => true %> <%= stylesheet_link_tag 'skeleton', media: 'all', 'data-turbolinks-track' => true %> <%= csrf_meta_tags %> </head> <body> <!-- container, esta declarada en skeleton.css --> <div class="container"> <%= yield %> </div> </body> </html>
  • 8. 8 Resultado después de aplicar skeleton.css
  • 9. 9 Relaciones entre Modelos Como los modelos se crearon mediante scaffold y haciendo referencia a otras tablas, Rails genera las relaciones a nivel código, por ejemplo para el modelo profesores: class Profesor < ActiveRecord::Base belongs_to :carrera end Para la dirección: http://localhost:3000/profesores En la columna carrera nos muestra algo “raro”, esto es la representación de un objeto. Para que nos muestre la carrera debemos modificar: <%= profesor.carrera%> Por: <%= profesor.carrera.carrera %> profesor. .carrera .carrera Objeto que se esta iterando Nombre de la relación en profesores Nombre de la columna. En la tabla carreras <tbody> <% @profesores.each do |profesor| %> <tr> <td><%= profesor.carrera.carrera %></td> <td><%= profesor.profesor %></td> <td><%= link_to 'Show', profesor %></td> <td><%= link_to 'Edit', edit_profesor_path(profesor) %></td> <td><%= link_to 'Destroy', profesor, method: :delete, data: { confirm: 'Are you sure?' } %></td> </tr> <% end %> </tbody> Este cambio se deberá realizar en todos los archivos index.html.erb y show.html.erb
  • 10. 10 Un poco mas allá de las relaciones Las ultimas dos relaciones, son para recuperar la lista de todos los alumnos, que están cursando una materia. La penultima relación es usada para lograr una relación directa, con la tabla, materias ya alumnos, esta relación sirve de puente. La ultima relación, source: :alumno indica el origen de datos de la relación, en este caso los son de la tabla de alumnos. class Materia < ActiveRecord::Base belongs_to :periodo belongs_to :carrera belongs_to :profesor belongs_to :salon # Relaciones adicionales has_many :AlumnoMaterias, :foreign_key => "materia_id" has_many :Alumnos, through: :AlumnoMaterias, source: :alumno end
  • 11. 11 Alumno Materias Para que funcione este modulo es necesario hacer una modificación en routes.rb resources :alumnos do resources :alumno_materias end Con esto accedemos desde la url: http://localhost:3000/alumnos/1/alumno_materias/new Y para ver las materias que esta cursando el alumnos, sera mediante la url: http://localhost:3000/alumnos/1 modificando el archivo show.html.erb Del controlador alumno_materias_controller.rb, solo usaremos los métodos: :new, :create y :destroy. En la clase, tenemos dos métodos, que antes de ejecutar un metodo, se inicializar la variable @alumno. class AlumnoMateriasController < ApplicationController before_action :set_alumno, only: [:new, :create, :destroy,:update] before_action :set_alumno_materia, only: [:update, :destroy] private # params[:alumno_id] :alumno_id, siempre llegara desde la URL def set_alumno @alumno = Alumno.find(params[:alumno_id]) end # este metodo solo se ejecuta para :update, :destroy def set_alumno_materia @alumno_materia = AlumnoMateria.find(params[:id]) end # Never trust parameters from the scary internet, only allow the white list through. def alumno_materia_params params.require(:alumno_materia).permit(:materia_id) end end
  • 12. 12 Otros Recursos http://rubysur.org/introduccion.a.rails/ Te recomiendo hacer la guía ( los dos enlaces tratan de lo mismo, el que mas te acomode) http://www.guiasrails.es/getting_started.html http://www.guiasrails.es/active_record_validations.html