Ruby on Rails: la revolución del desarrollo web
Esteban Manchado Velázquez
[email protected]
15 de mayo de 2006
Índice
1 Introducción
La revolución del desarrollo web
MVC
Otras comodidades
2 Cada componente en detalle
ActiveRecord
ActionPack
Enlaces
Índice
1 Introducción
La revolución del desarrollo web
MVC
Otras comodidades
2 Cada componente en detalle
ActiveRecord
ActionPack
Enlaces
Desarrollo web tradicional
• Separación de conceptos
Desarrollo web tradicional
• Separación de conceptos
• Duplicación de código
Desarrollo web tradicional
• Separación de conceptos
• Duplicación de código
• Por separado, ((maduro)), pero no muy bien integrado
Desarrollo web tradicional
• Separación de conceptos
• Duplicación de código
• Por separado, ((maduro)), pero no muy bien integrado
• MVC de moda últimamente
Desarrollo web tradicional
• Separación de conceptos
• Duplicación de código
• Por separado, ((maduro)), pero no muy bien integrado
• MVC de moda últimamente
• Hay poca cosa preparada para la Web 2.0
Nacimiento de RoR
• David Heinemeier Hansson (Dinamarca)
Nacimiento de RoR
• David Heinemeier Hansson (Dinamarca)
• Está loco
Nacimiento de RoR
• David Heinemeier Hansson (Dinamarca)
• Está loco
• Programaba en PHP
Nacimiento de RoR
• David Heinemeier Hansson (Dinamarca)
• Está loco
• Programaba en PHP (me estoy repitiendo)
• Intentó escribir Rails en PHP...
Nacimiento de RoR
• David Heinemeier Hansson (Dinamarca)
• Está loco
• Programaba en PHP (me estoy repitiendo)
• Intentó escribir Rails en PHP...
• ...pero fracasó miserablemente
Nacimiento de RoR
• David Heinemeier Hansson (Dinamarca)
• Está loco
• Programaba en PHP (me estoy repitiendo)
• Intentó escribir Rails en PHP...
• ...pero fracasó miserablemente
• Necesitaba algo más
Nacimiento de RoR
• David Heinemeier Hansson (Dinamarca)
• Está loco
• Programaba en PHP (me estoy repitiendo)
• Intentó escribir Rails en PHP...
• ...pero fracasó miserablemente
• Necesitaba algo más →
Nacimiento de RoR
• David Heinemeier Hansson (Dinamarca)
• Está loco
• Programaba en PHP (me estoy repitiendo)
• Intentó escribir Rails en PHP...
• ...pero fracasó miserablemente
• Necesitaba algo más →
• Un amigo le había nombrado Ruby y...
Nacimiento de RoR
• David Heinemeier Hansson (Dinamarca)
• Está loco
• Programaba en PHP (me estoy repitiendo)
• Intentó escribir Rails en PHP...
• ...pero fracasó miserablemente
• Necesitaba algo más →
• Un amigo le había nombrado Ruby y...
• ...ahora todos se quieren copiar...
Nacimiento de RoR
• David Heinemeier Hansson (Dinamarca)
• Está loco
• Programaba en PHP (me estoy repitiendo)
• Intentó escribir Rails en PHP...
• ...pero fracasó miserablemente
• Necesitaba algo más →
• Un amigo le había nombrado Ruby y...
• ...ahora todos se quieren copiar...
• ...¡incluso en PHP!
Los cinco pilares del Islam^WRails
• Productividad máxima
Los cinco pilares del Islam^WRails
• Productividad máxima
• Sentido estético
Los cinco pilares del Islam^WRails
• Productividad máxima
• Sentido estético
• Herramientas más o menos buenas...
Los cinco pilares del Islam^WRails
• Productividad máxima
• Sentido estético
• Herramientas más o menos buenas...
• ...muy bien integradas (todo > partes)
Los cinco pilares del Islam^WRails
• Productividad máxima
• Sentido estético
• Herramientas más o menos buenas...
• ...muy bien integradas (todo > partes)
• Simplicidad, DRY (Don’t Repeat Yourself)
Los cinco pilares del Islam^WRails
• Productividad máxima
• Sentido estético
• Herramientas más o menos buenas...
• ...muy bien integradas (todo > partes)
• Simplicidad, DRY (Don’t Repeat Yourself)
• ¡Abajo la configuración, arriba las convenciones!
Índice
1 Introducción
La revolución del desarrollo web
MVC
Otras comodidades
2 Cada componente en detalle
ActiveRecord
ActionPack
Enlaces
MVC a grandes rasgos
• Modelo, Vista y Controlador
MVC a grandes rasgos
• Modelo, Vista y Controlador
MVC a grandes rasgos
• Modelo, Vista y Controlador
• Modelo para los datos
MVC a grandes rasgos
• Modelo, Vista y Controlador
• Modelo para los datos
• Vista para la interfaz (HTML en este caso)
MVC a grandes rasgos
• Modelo, Vista y Controlador
• Modelo para los datos
• Vista para la interfaz (HTML en este caso)
• Controlador para atraerlos a todos y atarlos a las... errhhh
MVC a grandes rasgos
• Modelo, Vista y Controlador
• Modelo para los datos
• Vista para la interfaz (HTML en este caso)
• Controlador para hacer cálculos y unir todas las piezas
MVC a grandes rasgos
• Modelo, Vista y Controlador
• Modelo para los datos
• Vista para la interfaz (HTML en este caso)
• Controlador para hacer cálculos y unir todas las piezas
• De invención bastante reciente
MVC a grandes rasgos
• Modelo, Vista y Controlador
• Modelo para los datos
• Vista para la interfaz (HTML en este caso)
• Controlador para hacer cálculos y unir todas las piezas
• De invención bastante reciente (1979)
MVC a grandes rasgos
• Modelo, Vista y Controlador
• Modelo para los datos
• Vista para la interfaz (HTML en este caso)
• Controlador para hacer cálculos y unir todas las piezas
• De invención bastante reciente (1979)
• Muy popular actualmente para plataformas de desarrollo web
Modelo
• Para acceder a los datos (BBDDs)
Modelo
• Para acceder a los datos (BBDDs)
• Módulo: ActiveRecord
Modelo
• Para acceder a los datos (BBDDs)
• Módulo: ActiveRecord
• Una clase representa una tabla
Modelo
• Para acceder a los datos (BBDDs)
• Módulo: ActiveRecord
• Una clase representa una tabla
• Se descubren automáticamente los campos...
Modelo
• Para acceder a los datos (BBDDs)
• Módulo: ActiveRecord
• Una clase representa una tabla
• Se descubren automáticamente los campos...
• ...y la tabla (Alumno → alumnos)
Modelo
• Para acceder a los datos (BBDDs)
• Módulo: ActiveRecord
• Una clase representa una tabla
• Se descubren automáticamente los campos...
• ...y la tabla (Alumno → alumnos)
• Se pueden declarar relaciones con otros
modelos/tablas
Modelo
• Para acceder a los datos (BBDDs)
• Módulo: ActiveRecord
• Una clase representa una tabla
• Se descubren automáticamente los campos...
• ...y la tabla (Alumno → alumnos)
• Se pueden declarar relaciones con otros
modelos/tablas
• Se puede personalizar y añadir métodos
Ejemplo de modelo
class Alumno < ActiveRecord::Base
has_many :cursos
def socio?
not num_socio.nil?
end
end
Ejemplo de modelo
class Alumno < ActiveRecord::Base
has_many :cursos
def socio?
not num_socio.nil?
end
end
Definición base
Ejemplo de modelo
class Alumno < ActiveRecord::Base
has_many :cursos
def socio?
not num_socio.nil?
end
end
Declaración de relación
Ejemplo de modelo
class Alumno < ActiveRecord::Base
has_many :cursos
def socio?
not num_socio.nil?
end
end
Nuevo método
Vista
• Para decidir el aspecto
Vista
• Para decidir el aspecto
• Módulo: ActionView
Vista
• Para decidir el aspecto
• Módulo: ActionView
• Plantillas en formato Embedded Ruby
Vista
• Para decidir el aspecto
• Módulo: ActionView
• Plantillas en formato Embedded Ruby
• HTML con Ruby embebido
Vista
• Para decidir el aspecto
• Módulo: ActionView
• Plantillas en formato Embedded Ruby
• HTML con Ruby embebido
• Una por cada acción de cada controlador
Vista
• Para decidir el aspecto
• Módulo: ActionView
• Plantillas en formato Embedded Ruby
• HTML con Ruby embebido
• Una por cada acción de cada controlador
• Corolario: dependen de los controladores
Vista
• Para decidir el aspecto
• Módulo: ActionView
• Plantillas en formato Embedded Ruby
• HTML con Ruby embebido
• Una por cada acción de cada controlador
• Corolario: dependen de los controladores
• HTML repetitivo, a funciones externas
(helpers)
Ejemplo de vista
<h1>Añadir alumno del curso < %= @curso.titulo %></h1>
< % Alumno.find_all(nil, ’nombre’).each do |a| %>
< %= radio_button(’alumno’, ’elegido’, a.id) %>
< % end %>
Ejemplo de vista
<h1>Añadir alumno del curso < %= @curso.titulo %></h1>
< % Alumno.find_all(nil, ’nombre’).each do |a| %>
< %= radio_button(’alumno’, ’elegido’, a.id) %>
< % end %>
Imprimir el resultado de la expresión
Ejemplo de vista
<h1>Añadir alumno del curso < %= @curso.titulo %></h1>
< % Alumno.find_all(nil, ’nombre’).each do |a| %>
< %= radio_button(’alumno’, ’elegido’, a.id) %>
< % end %>
Ejecutar código Ruby, sin imprimir
Ejemplo de vista
<h1>Añadir alumno del curso < %= @curso.titulo %></h1>
< % Alumno.find_all(nil, ’nombre’).each do |a| %>
< %= radio_button(’alumno’, ’elegido’, a.id) %>
< % end %>
Helpers
Controlador
• ((Bisagra)) del MVC y lógica de cálculos
Controlador
• ((Bisagra)) del MVC y lógica de cálculos
• Módulo: ActionPack
Controlador
• ((Bisagra)) del MVC y lógica de cálculos
• Módulo: ActionPack
• Cada controlador, una clase de Ruby
Controlador
• ((Bisagra)) del MVC y lógica de cálculos
• Módulo: ActionPack
• Cada controlador, una clase de Ruby
• Cada método, una acción
Controlador
• ((Bisagra)) del MVC y lógica de cálculos
• Módulo: ActionPack
• Cada controlador, una clase de Ruby
• Cada método, una acción
• ((Andamios)) (scaffold) para avanzar más rápido
Ejemplo de controlador
class CursoController < ApplicationController
layout
def nueva_accion
’base’
@curso = Curso.find(params[:id])
end
end
Ejemplo de controlador
class CursoController < ApplicationController
layout
def nueva_accion
’base’
@curso = Curso.find(params[:id])
end
end
Definición base
Ejemplo de controlador
class CursoController < ApplicationController
layout
def nueva_accion
’base’
@curso = Curso.find(params[:id])
end
end
Declarar una plantilla ((general)) alternativa
Ejemplo de controlador
class CursoController < ApplicationController
layout
def nueva_accion
’base’
@curso = Curso.find(params[:id])
end
end
Nueva acción
Ejemplo de controlador
class CursoController
Comentarios de: Ruby on Rails: la revolución del desarrollo web (0)
No hay comentarios