Ruby on Rails: la revolución del desarrollo web
Esteban Manchado Velázquez
[email protected]
24 de noviembre de 2005
Índice
1 Introducción
La revolución del desarrollo web
MVC
Otras comodidades
Conclusión
2 Demo
Preparación
Ejecución
Índice
1 Introducción
La revolución del desarrollo web
MVC
Otras comodidades
Conclusión
2 Demo
Preparación
Ejecución
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 (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
Conclusión
2 Demo
Preparación
Ejecución
Modelo
• Para acceder a los datos
Modelo
• Para acceder a los datos
• Módulo: ActiveRecord
Modelo
• Para acceder a los datos
• Módulo: ActiveRecord
• Descubre automáticamente los campos...
Modelo
• Para acceder a los datos
• Módulo: ActiveRecord
• Descubre automáticamente los campos...
• ...y la tabla (Alumno → alumnos)
Modelo
• Para acceder a los datos
• Módulo: ActiveRecord
• Descubre automáticamente los campos...
• ...y la tabla (Alumno → alumnos)
• Se puede personalizar y añadir métodos
Modelo
• Para acceder a los datos
• Módulo: ActiveRecord
• Descubre automáticamente los campos...
• ...y la tabla (Alumno → alumnos)
• Se puede personalizar y añadir métodos
• Se crean con script/generate model alumno
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: Embedded Ruby, erb
Vista
• Para decidir el aspecto
• Módulo: Embedded Ruby, erb
• Ruby embebido en HTML
Vista
• Para decidir el aspecto
• Módulo: Embedded Ruby, erb
• Ruby embebido en HTML
• Simple, potente
Vista
• Para decidir el aspecto
• Módulo: Embedded Ruby, erb
• Ruby embebido en HTML
• Simple, potente
• HTML repetitivo, a funciones externas (helpers)
Vista
• Para decidir el aspecto
• Módulo: Embedded Ruby, erb
• Ruby embebido en HTML
• Simple, potente
• HTML repetitivo, a funciones externas (helpers)
• Ficheros .rhtml en app/views/controlador
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
• Lógica de la aplicación (negocio)
Controlador
• Lógica de la aplicación (negocio)
• Módulo: ActionPack
Controlador
• Lógica de la aplicación (negocio)
• Módulo: ActionPack
• ((Bisagra)) del MVC
Controlador
• Lógica de la aplicación (negocio)
• Módulo: ActionPack
• ((Bisagra)) del MVC
• Clases de Ruby
Controlador
• Lógica de la aplicación (negocio)
• Módulo: ActionPack
• ((Bisagra)) del MVC
• Clases de Ruby
• Un método, una acción
Controlador
• Lógica de la aplicación (negocio)
• Módulo: ActionPack
• ((Bisagra)) del MVC
• Clases de Ruby
• Un método, una acción
• ((Andamios)) (scaffold) para avanzar más rápido
Controlador
• Lógica de la aplicación (negocio)
• Módulo: ActionPack
• ((Bisagra)) del MVC
• Clases de Ruby
• Un método, una acción
• ((Andamios)) (scaffold) para avanzar más rápido
• Se crean con script/generate controller
alumno
Ejemplo de controlador
class CursoController < ApplicationController
scaffold :curso
layout
’base’
def nueva_accion
render(:text => "Nueva acción")
end
end
Ejemplo de controlador
class CursoController < ApplicationController
scaffold :curso
layout
’base’
def nueva_accion
render(:text => "Nueva acción")
end
end
Definición base
Ejemplo de controlador
class CursoController < ApplicationController
scaffold :curso
layout
’base’
def nueva_accion
render(:text => "Nueva acción")
end
end
Crear andamio dinámico para el modelo ’curso’
Ejemplo de controlador
class CursoController < ApplicationController
scaffold :curso
layout
’base’
def nueva_accion
render(:text => "Nueva acción")
end
end
Declarar una plantilla ((general)) alternativa
Ejemplo de controlador
class CursoController < ApplicationController
scaffold :curso
layout
’base’
def nueva_accion
render(:text => "Nueva acción")
end
end
Nueva acción
Índice
1 Introducción
La revolución del desarrollo web
MVC
Otras comodidades
Conclusión
2 Demo
Preparación
Ejecución
Utilidades
• Para empezar, rails
Utilidades
• Para empezar, rails
• Y las de ./script/foo :
Utilidades
• Para empezar, rails
• Y las de ./script/foo :
• generate (genera código)
Utilidades
• Para empezar, rails
• Y las de ./script/foo :
• generate (genera código)
• server (servidor simple para desarrollo)
Utilidades
• Para empezar, rails
• Y las de ./script/foo :
• generate (genera código)
• server (servidor simple para desarrollo)
• console (consola interactiva)
Utilidades
• Para empezar, rails
• Y las de ./script/foo :
• generate (genera código)
• server (servidor simple para desarrollo)
• console (consola interactiva)
• runner (ejecuta trozos de Ruby)
Utilidades
• Para empezar, rails
• Y las de ./script/foo :
• generate (genera código)
• server (servidor simple para desarrollo)
• console (consola interactiva)
• runner (ejecuta trozos de Ruby)
• breakpointer (engancha con puntos de ruptura)
Rakefile
• Una especie de Makefile...
Rakefile
• Una especie de Makefile...
• ...pero escrito en Ruby
Rakefile
• Una especie de Makefile...
• ...pero escrito en Ruby
• Viene un Rakefile de serie, con varios objetivos:
Rakefile
• Una especie de Makefile...
• ...pero escrito en Ruby
• Viene un Rakefile de serie, con varios objetivos:
• stats
Rakefile
• Una especie de Makefile...
• ...pero escrito en Ruby
• Viene un Rakefile de serie, con varios objetivos:
• stats
• doc
Rakefile
• Una especie de Makefile...
• ...pero escrito en Ruby
• Viene un Rakefile de serie, con varios objetivos:
• stats
• doc
• test
Rakefile
• Una especie de Makefile...
• ...pero escrito en Ruby
• Viene un Rakefile de serie, con varios objetivos:
• stats
•
Comentarios de: Ruby on Rails: la revolución del desarrollo web (0)
No hay comentarios