View
6
Download
0
Category
Preview:
Citation preview
Ruby on Rails: la revolucion del desarrollo web
Esteban Manchado Velazquezzoso@foton.es
15 de mayo de 2006
Indice
1 IntroduccionLa revolucion del desarrollo webMVCOtras comodidades
2 Cada componente en detalleActiveRecordActionPackEnlaces
Indice
1 IntroduccionLa revolucion del desarrollo webMVCOtras comodidades
2 Cada componente en detalleActiveRecordActionPackEnlaces
Desarrollo web tradicional
• Separacion de conceptos
• Duplicacion de codigo
• Por separado, ((maduro)), pero no muy bien integrado
• MVC de moda ultimamente
• Hay poca cosa preparada para la Web 2.0
Desarrollo web tradicional
• Separacion de conceptos
• Duplicacion de codigo
• Por separado, ((maduro)), pero no muy bien integrado
• MVC de moda ultimamente
• Hay poca cosa preparada para la Web 2.0
Desarrollo web tradicional
• Separacion de conceptos
• Duplicacion de codigo
• Por separado, ((maduro)), pero no muy bien integrado
• MVC de moda ultimamente
• Hay poca cosa preparada para la Web 2.0
Desarrollo web tradicional
• Separacion de conceptos
• Duplicacion de codigo
• Por separado, ((maduro)), pero no muy bien integrado
• MVC de moda ultimamente
• Hay poca cosa preparada para la Web 2.0
Desarrollo web tradicional
• Separacion de conceptos
• Duplicacion de codigo
• Por separado, ((maduro)), pero no muy bien integrado
• MVC de moda ultimamente
• Hay poca cosa preparada para la Web 2.0
Nacimiento de RoR
• David Heinemeier Hansson (Dinamarca)
• Esta loco
• Programaba en PHP
(me estoy repitiendo)
• Intento escribir Rails en PHP...
• ...pero fracaso miserablemente
• Necesitaba algo mas
→
• Un amigo le habıa nombrado Ruby y...
• ...ahora todos se quieren copiar...
• ...¡incluso en PHP!
Nacimiento de RoR
• David Heinemeier Hansson (Dinamarca)
• Esta loco
• Programaba en PHP
(me estoy repitiendo)
• Intento escribir Rails en PHP...
• ...pero fracaso miserablemente
• Necesitaba algo mas
→
• Un amigo le habıa nombrado Ruby y...
• ...ahora todos se quieren copiar...
• ...¡incluso en PHP!
Nacimiento de RoR
• David Heinemeier Hansson (Dinamarca)
• Esta loco
• Programaba en PHP
(me estoy repitiendo)
• Intento escribir Rails en PHP...
• ...pero fracaso miserablemente
• Necesitaba algo mas
→
• Un amigo le habıa nombrado Ruby y...
• ...ahora todos se quieren copiar...
• ...¡incluso en PHP!
Nacimiento de RoR
• David Heinemeier Hansson (Dinamarca)
• Esta loco
• Programaba en PHP (me estoy repitiendo)
• Intento escribir Rails en PHP...
• ...pero fracaso miserablemente
• Necesitaba algo mas
→
• Un amigo le habıa nombrado Ruby y...
• ...ahora todos se quieren copiar...
• ...¡incluso en PHP!
Nacimiento de RoR
• David Heinemeier Hansson (Dinamarca)
• Esta loco
• Programaba en PHP (me estoy repitiendo)
• Intento escribir Rails en PHP...
• ...pero fracaso miserablemente
• Necesitaba algo mas
→
• Un amigo le habıa nombrado Ruby y...
• ...ahora todos se quieren copiar...
• ...¡incluso en PHP!
Nacimiento de RoR
• David Heinemeier Hansson (Dinamarca)
• Esta loco
• Programaba en PHP (me estoy repitiendo)
• Intento escribir Rails en PHP...
• ...pero fracaso miserablemente
• Necesitaba algo mas
→• Un amigo le habıa nombrado Ruby y...
• ...ahora todos se quieren copiar...
• ...¡incluso en PHP!
Nacimiento de RoR
• David Heinemeier Hansson (Dinamarca)
• Esta loco
• Programaba en PHP (me estoy repitiendo)
• Intento escribir Rails en PHP...
• ...pero fracaso miserablemente
• Necesitaba algo mas →
• Un amigo le habıa nombrado Ruby y...
• ...ahora todos se quieren copiar...
• ...¡incluso en PHP!
Nacimiento de RoR
• David Heinemeier Hansson (Dinamarca)
• Esta loco
• Programaba en PHP (me estoy repitiendo)
• Intento escribir Rails en PHP...
• ...pero fracaso miserablemente
• Necesitaba algo mas →• Un amigo le habıa nombrado Ruby y...
• ...ahora todos se quieren copiar...
• ...¡incluso en PHP!
Nacimiento de RoR
• David Heinemeier Hansson (Dinamarca)
• Esta loco
• Programaba en PHP (me estoy repitiendo)
• Intento escribir Rails en PHP...
• ...pero fracaso miserablemente
• Necesitaba algo mas →• Un amigo le habıa nombrado Ruby y...
• ...ahora todos se quieren copiar...
• ...¡incluso en PHP!
Nacimiento de RoR
• David Heinemeier Hansson (Dinamarca)
• Esta loco
• Programaba en PHP (me estoy repitiendo)
• Intento escribir Rails en PHP...
• ...pero fracaso miserablemente
• Necesitaba algo mas →• Un amigo le habıa nombrado Ruby y...
• ...ahora todos se quieren copiar...
• ...¡incluso en PHP!
Los cinco pilares del Islam^WRails
• Productividad maxima
• Sentido estetico
• Herramientas mas o menos buenas...
• ...muy bien integradas (todo > partes)
• Simplicidad, DRY (Don’t Repeat Yourself)
• ¡Abajo la configuracion, arriba las convenciones!
Los cinco pilares del Islam^WRails
• Productividad maxima
• Sentido estetico
• Herramientas mas o menos buenas...
• ...muy bien integradas (todo > partes)
• Simplicidad, DRY (Don’t Repeat Yourself)
• ¡Abajo la configuracion, arriba las convenciones!
Los cinco pilares del Islam^WRails
• Productividad maxima
• Sentido estetico
• Herramientas mas o menos buenas...
• ...muy bien integradas (todo > partes)
• Simplicidad, DRY (Don’t Repeat Yourself)
• ¡Abajo la configuracion, arriba las convenciones!
Los cinco pilares del Islam^WRails
• Productividad maxima
• Sentido estetico
• Herramientas mas o menos buenas...
• ...muy bien integradas (todo > partes)
• Simplicidad, DRY (Don’t Repeat Yourself)
• ¡Abajo la configuracion, arriba las convenciones!
Los cinco pilares del Islam^WRails
• Productividad maxima
• Sentido estetico
• Herramientas mas o menos buenas...
• ...muy bien integradas (todo > partes)
• Simplicidad, DRY (Don’t Repeat Yourself)
• ¡Abajo la configuracion, arriba las convenciones!
Los cinco pilares del Islam^WRails
• Productividad maxima
• Sentido estetico
• Herramientas mas o menos buenas...
• ...muy bien integradas (todo > partes)
• Simplicidad, DRY (Don’t Repeat Yourself)
• ¡Abajo la configuracion, arriba las convenciones!
Indice
1 IntroduccionLa revolucion del desarrollo webMVCOtras comodidades
2 Cada componente en detalleActiveRecordActionPackEnlaces
MVC a grandes rasgos
• Modelo, Vista y Controlador
• Modelo para los datos
• Vista para la interfaz (HTML en este caso)
• Controlador para
• De invencion bastante reciente
• Muy popular actualmente para plataformas de desarrollo web
MVC a grandes rasgos
• Modelo, Vista y Controlador
• Modelo para los datos
• Vista para la interfaz (HTML en este caso)
• Controlador para
• De invencion bastante reciente
• Muy popular actualmente para plataformas de desarrollo web
MVC a grandes rasgos
• Modelo, Vista y Controlador
• Modelo para los datos
• Vista para la interfaz (HTML en este caso)
• Controlador para
• De invencion bastante reciente
• Muy popular actualmente para plataformas de desarrollo web
MVC a grandes rasgos
• Modelo, Vista y Controlador
• Modelo para los datos
• Vista para la interfaz (HTML en este caso)
• Controlador para
• De invencion bastante reciente
• Muy popular actualmente para plataformas de desarrollo web
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
• De invencion bastante reciente
• Muy popular actualmente para plataformas de desarrollo web
MVC a grandes rasgos
• Modelo, Vista y Controlador
• Modelo para los datos
• Vista para la interfaz (HTML en este caso)
• Controlador para hacer calculos y unir todas las piezas
• De invencion bastante reciente
• Muy popular actualmente para plataformas de desarrollo web
MVC a grandes rasgos
• Modelo, Vista y Controlador
• Modelo para los datos
• Vista para la interfaz (HTML en este caso)
• Controlador para hacer calculos y unir todas las piezas
• De invencion bastante reciente
• Muy popular actualmente para plataformas de desarrollo web
MVC a grandes rasgos
• Modelo, Vista y Controlador
• Modelo para los datos
• Vista para la interfaz (HTML en este caso)
• Controlador para hacer calculos y unir todas las piezas
• De invencion bastante reciente (1979)
• Muy popular actualmente para plataformas de desarrollo web
MVC a grandes rasgos
• Modelo, Vista y Controlador
• Modelo para los datos
• Vista para la interfaz (HTML en este caso)
• Controlador para hacer calculos y unir todas las piezas
• De invencion bastante reciente (1979)
• Muy popular actualmente para plataformas de desarrollo web
Modelo
• Para acceder a los datos (BBDDs)
• Modulo: ActiveRecord
• Una clase representa una tabla
• Se descubren automaticamente los campos...
• ...y la tabla (Alumno → alumnos)
• Se pueden declarar relaciones con otrosmodelos/tablas
• Se puede personalizar y anadir metodos
Modelo
• Para acceder a los datos (BBDDs)
• Modulo: ActiveRecord
• Una clase representa una tabla
• Se descubren automaticamente los campos...
• ...y la tabla (Alumno → alumnos)
• Se pueden declarar relaciones con otrosmodelos/tablas
• Se puede personalizar y anadir metodos
Modelo
• Para acceder a los datos (BBDDs)
• Modulo: ActiveRecord
• Una clase representa una tabla
• Se descubren automaticamente los campos...
• ...y la tabla (Alumno → alumnos)
• Se pueden declarar relaciones con otrosmodelos/tablas
• Se puede personalizar y anadir metodos
Modelo
• Para acceder a los datos (BBDDs)
• Modulo: ActiveRecord
• Una clase representa una tabla
• Se descubren automaticamente los campos...
• ...y la tabla (Alumno → alumnos)
• Se pueden declarar relaciones con otrosmodelos/tablas
• Se puede personalizar y anadir metodos
Modelo
• Para acceder a los datos (BBDDs)
• Modulo: ActiveRecord
• Una clase representa una tabla
• Se descubren automaticamente los campos...
• ...y la tabla (Alumno → alumnos)
• Se pueden declarar relaciones con otrosmodelos/tablas
• Se puede personalizar y anadir metodos
Modelo
• Para acceder a los datos (BBDDs)
• Modulo: ActiveRecord
• Una clase representa una tabla
• Se descubren automaticamente los campos...
• ...y la tabla (Alumno → alumnos)
• Se pueden declarar relaciones con otrosmodelos/tablas
• Se puede personalizar y anadir metodos
Modelo
• Para acceder a los datos (BBDDs)
• Modulo: ActiveRecord
• Una clase representa una tabla
• Se descubren automaticamente los campos...
• ...y la tabla (Alumno → alumnos)
• Se pueden declarar relaciones con otrosmodelos/tablas
• Se puede personalizar y anadir metodos
Ejemplo de modelo
class Alumno < ActiveRecord::Basehas_many :cursosdef socio?
not num_socio.nil?end
end
Ejemplo de modelo
class Alumno < ActiveRecord::Basehas_many :cursosdef socio?
not num_socio.nil?end
end
Definicion base
Ejemplo de modelo
class Alumno < ActiveRecord::Basehas_many :cursosdef socio?
not num_socio.nil?end
end
Declaracion de relacion
Ejemplo de modelo
class Alumno < ActiveRecord::Basehas_many :cursosdef socio?
not num_socio.nil?end
end
Nuevo metodo
Vista
• Para decidir el aspecto
• Modulo: ActionView
• Plantillas en formato Embedded Ruby
• HTML con Ruby embebido
• Una por cada accion de cada controlador
• Corolario: dependen de los controladores
• HTML repetitivo, a funciones externas(helpers)
Vista
• Para decidir el aspecto
• Modulo: ActionView
• Plantillas en formato Embedded Ruby
• HTML con Ruby embebido
• Una por cada accion de cada controlador
• Corolario: dependen de los controladores
• HTML repetitivo, a funciones externas(helpers)
Vista
• Para decidir el aspecto
• Modulo: ActionView
• Plantillas en formato Embedded Ruby
• HTML con Ruby embebido
• Una por cada accion de cada controlador
• Corolario: dependen de los controladores
• HTML repetitivo, a funciones externas(helpers)
Vista
• Para decidir el aspecto
• Modulo: ActionView
• Plantillas en formato Embedded Ruby
• HTML con Ruby embebido
• Una por cada accion de cada controlador
• Corolario: dependen de los controladores
• HTML repetitivo, a funciones externas(helpers)
Vista
• Para decidir el aspecto
• Modulo: ActionView
• Plantillas en formato Embedded Ruby
• HTML con Ruby embebido
• Una por cada accion de cada controlador
• Corolario: dependen de los controladores
• HTML repetitivo, a funciones externas(helpers)
Vista
• Para decidir el aspecto
• Modulo: ActionView
• Plantillas en formato Embedded Ruby
• HTML con Ruby embebido
• Una por cada accion de cada controlador
• Corolario: dependen de los controladores
• HTML repetitivo, a funciones externas(helpers)
Vista
• Para decidir el aspecto
• Modulo: ActionView
• Plantillas en formato Embedded Ruby
• HTML con Ruby embebido
• Una por cada accion de cada controlador
• Corolario: dependen de los controladores
• HTML repetitivo, a funciones externas(helpers)
Ejemplo de vista
<h1>A~nadir 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~nadir 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 expresion
Ejemplo de vista
<h1>A~nadir alumno del curso < %= @curso.titulo %></h1>< % Alumno.find_all(nil, ’nombre’).each do |a| %>< %= radio_button(’alumno’, ’elegido’, a.id) %>
< % end %>
Ejecutar codigo Ruby, sin imprimir
Ejemplo de vista
<h1>A~nadir 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 logica de calculos
• Modulo: ActionPack
• Cada controlador, una clase de Ruby
• Cada metodo, una accion
• ((Andamios)) (scaffold) para avanzar mas rapido
Controlador
• ((Bisagra)) del MVC y logica de calculos
• Modulo: ActionPack
• Cada controlador, una clase de Ruby
• Cada metodo, una accion
• ((Andamios)) (scaffold) para avanzar mas rapido
Controlador
• ((Bisagra)) del MVC y logica de calculos
• Modulo: ActionPack
• Cada controlador, una clase de Ruby
• Cada metodo, una accion
• ((Andamios)) (scaffold) para avanzar mas rapido
Controlador
• ((Bisagra)) del MVC y logica de calculos
• Modulo: ActionPack
• Cada controlador, una clase de Ruby
• Cada metodo, una accion
• ((Andamios)) (scaffold) para avanzar mas rapido
Controlador
• ((Bisagra)) del MVC y logica de calculos
• Modulo: ActionPack
• Cada controlador, una clase de Ruby
• Cada metodo, una accion
• ((Andamios)) (scaffold) para avanzar mas rapido
Ejemplo de controlador
class CursoController < ApplicationControllerlayout ’base’def nueva_accion@curso = Curso.find(params[:id])
endend
Ejemplo de controlador
class CursoController < ApplicationControllerlayout ’base’def nueva_accion@curso = Curso.find(params[:id])
endend
Definicion base
Ejemplo de controlador
class CursoController < ApplicationControllerlayout ’base’def nueva_accion@curso = Curso.find(params[:id])
endend
Declarar una plantilla ((general)) alternativa
Ejemplo de controlador
class CursoController < ApplicationControllerlayout ’base’def nueva_accion@curso = Curso.find(params[:id])
endend
Nueva accion
Ejemplo de controlador
class CursoController < ApplicationControllerlayout ’base’def nueva_accion@curso = Curso.find(params[:id])
endend
Variables de objeto (se veran en la plantilla)
Ejemplo de controlador
class CursoController < ApplicationControllerlayout ’base’def nueva_accion@curso = Curso.find(params[:id])
endend
Uso de modelos
Ejemplo de controlador
class CursoController < ApplicationControllerlayout ’base’def nueva_accion@curso = Curso.find(params[:id])
endend
Acceso a parametros
Indice
1 IntroduccionLa revolucion del desarrollo webMVCOtras comodidades
2 Cada componente en detalleActiveRecordActionPackEnlaces
Utilidades
• Para empezar, rails
• Y las de ./script/foo :
• generate (genera codigo)• server (servidor simple para desarrollo)• console (consola interactiva)• runner (ejecuta trozos de Ruby)• breakpointer (engancha con puntos de ruptura)
Utilidades
• Para empezar, rails
• Y las de ./script/foo :
• generate (genera codigo)• server (servidor simple para desarrollo)• console (consola interactiva)• runner (ejecuta trozos de Ruby)• breakpointer (engancha con puntos de ruptura)
Utilidades
• Para empezar, rails
• Y las de ./script/foo :• generate (genera codigo)
• server (servidor simple para desarrollo)• console (consola interactiva)• runner (ejecuta trozos de Ruby)• breakpointer (engancha con puntos de ruptura)
Utilidades
• Para empezar, rails
• Y las de ./script/foo :• generate (genera codigo)• server (servidor simple para desarrollo)
• console (consola interactiva)• runner (ejecuta trozos de Ruby)• breakpointer (engancha con puntos de ruptura)
Utilidades
• Para empezar, rails
• Y las de ./script/foo :• generate (genera codigo)• server (servidor simple para desarrollo)• console (consola interactiva)
• runner (ejecuta trozos de Ruby)• breakpointer (engancha con puntos de ruptura)
Utilidades
• Para empezar, rails
• Y las de ./script/foo :• generate (genera codigo)• server (servidor simple para desarrollo)• console (consola interactiva)• runner (ejecuta trozos de Ruby)
• breakpointer (engancha con puntos de ruptura)
Utilidades
• Para empezar, rails
• Y las de ./script/foo :• generate (genera codigo)• server (servidor simple para desarrollo)• console (consola interactiva)• runner (ejecuta trozos de Ruby)• breakpointer (engancha con puntos de ruptura)
Rakefile
• Una especie de Makefile...
• ...pero escrito en Ruby
• Viene un Rakefile de serie, con varios objetivos:
• stats• doc• test• test recent• migrate
Rakefile
• Una especie de Makefile...
• ...pero escrito en Ruby
• Viene un Rakefile de serie, con varios objetivos:
• stats• doc• test• test recent• migrate
Rakefile
• Una especie de Makefile...
• ...pero escrito en Ruby
• Viene un Rakefile de serie, con varios objetivos:
• stats• doc• test• test recent• migrate
Rakefile
• Una especie de Makefile...
• ...pero escrito en Ruby
• Viene un Rakefile de serie, con varios objetivos:• stats
• doc• test• test recent• migrate
Rakefile
• Una especie de Makefile...
• ...pero escrito en Ruby
• Viene un Rakefile de serie, con varios objetivos:• stats• doc
• test• test recent• migrate
Rakefile
• Una especie de Makefile...
• ...pero escrito en Ruby
• Viene un Rakefile de serie, con varios objetivos:• stats• doc• test
• test recent• migrate
Rakefile
• Una especie de Makefile...
• ...pero escrito en Ruby
• Viene un Rakefile de serie, con varios objetivos:• stats• doc• test• test recent
• migrate
Rakefile
• Una especie de Makefile...
• ...pero escrito en Ruby
• Viene un Rakefile de serie, con varios objetivos:• stats• doc• test• test recent• migrate
Indice
1 IntroduccionLa revolucion del desarrollo webMVCOtras comodidades
2 Cada componente en detalleActiveRecordActionPackEnlaces
ActiveRecord
• Capa de acceso a bases de datos SQL
• Abstrae los accesos a cada tabla
• Cada registro de cada tabla es un objeto
• Los campos son los metodos
• ¡Atras, SQL, yo te lo mando, callate y obedece!
• Convencion de nombres: Cosa para la tabla cosas
• Sı, puedes usar bases de datos existentes (set table name)
• Tambien problemas con ((no ingles)), pero varias soluciones
• Nuevo modelo → ./script/generate model Tabla
ActiveRecord
• Capa de acceso a bases de datos SQL
• Abstrae los accesos a cada tabla
• Cada registro de cada tabla es un objeto
• Los campos son los metodos
• ¡Atras, SQL, yo te lo mando, callate y obedece!
• Convencion de nombres: Cosa para la tabla cosas
• Sı, puedes usar bases de datos existentes (set table name)
• Tambien problemas con ((no ingles)), pero varias soluciones
• Nuevo modelo → ./script/generate model Tabla
ActiveRecord
• Capa de acceso a bases de datos SQL
• Abstrae los accesos a cada tabla
• Cada registro de cada tabla es un objeto
• Los campos son los metodos
• ¡Atras, SQL, yo te lo mando, callate y obedece!
• Convencion de nombres: Cosa para la tabla cosas
• Sı, puedes usar bases de datos existentes (set table name)
• Tambien problemas con ((no ingles)), pero varias soluciones
• Nuevo modelo → ./script/generate model Tabla
ActiveRecord
• Capa de acceso a bases de datos SQL
• Abstrae los accesos a cada tabla
• Cada registro de cada tabla es un objeto
• Los campos son los metodos
• ¡Atras, SQL, yo te lo mando, callate y obedece!
• Convencion de nombres: Cosa para la tabla cosas
• Sı, puedes usar bases de datos existentes (set table name)
• Tambien problemas con ((no ingles)), pero varias soluciones
• Nuevo modelo → ./script/generate model Tabla
ActiveRecord
• Capa de acceso a bases de datos SQL
• Abstrae los accesos a cada tabla
• Cada registro de cada tabla es un objeto
• Los campos son los metodos
• ¡Atras, SQL, yo te lo mando, callate y obedece!
• Convencion de nombres: Cosa para la tabla cosas
• Sı, puedes usar bases de datos existentes (set table name)
• Tambien problemas con ((no ingles)), pero varias soluciones
• Nuevo modelo → ./script/generate model Tabla
ActiveRecord
• Capa de acceso a bases de datos SQL
• Abstrae los accesos a cada tabla
• Cada registro de cada tabla es un objeto
• Los campos son los metodos
• ¡Atras, SQL, yo te lo mando, callate y obedece!
• Convencion de nombres: Cosa para la tabla cosas
• Sı, puedes usar bases de datos existentes (set table name)
• Tambien problemas con ((no ingles)), pero varias soluciones
• Nuevo modelo → ./script/generate model Tabla
ActiveRecord
• Capa de acceso a bases de datos SQL
• Abstrae los accesos a cada tabla
• Cada registro de cada tabla es un objeto
• Los campos son los metodos
• ¡Atras, SQL, yo te lo mando, callate y obedece!
• Convencion de nombres: Cosa para la tabla cosas
• Sı, puedes usar bases de datos existentes (set table name)
• Tambien problemas con ((no ingles)), pero varias soluciones
• Nuevo modelo → ./script/generate model Tabla
ActiveRecord
• Capa de acceso a bases de datos SQL
• Abstrae los accesos a cada tabla
• Cada registro de cada tabla es un objeto
• Los campos son los metodos
• ¡Atras, SQL, yo te lo mando, callate y obedece!
• Convencion de nombres: Cosa para la tabla cosas
• Sı, puedes usar bases de datos existentes (set table name)
• Tambien problemas con ((no ingles)), pero varias soluciones
• Nuevo modelo → ./script/generate model Tabla
ActiveRecord
• Capa de acceso a bases de datos SQL
• Abstrae los accesos a cada tabla
• Cada registro de cada tabla es un objeto
• Los campos son los metodos
• ¡Atras, SQL, yo te lo mando, callate y obedece!
• Convencion de nombres: Cosa para la tabla cosas
• Sı, puedes usar bases de datos existentes (set table name)
• Tambien problemas con ((no ingles)), pero varias soluciones
• Nuevo modelo → ./script/generate model Tabla
Relaciones y mas
• Casi lo mas importante de ActiveRecord
• Acceder facilmente a modelos relacionados
• Se declaran con ((macros))
• has many, belongs to, has and belongs to, etc.
• Convenciones para reducir al mınimo el codigo
• Montones de caracterısticas interesantes (¡pero no haytiempo!)
• Validadores, migraciones, observadores
Relaciones y mas
• Casi lo mas importante de ActiveRecord
• Acceder facilmente a modelos relacionados
• Se declaran con ((macros))
• has many, belongs to, has and belongs to, etc.
• Convenciones para reducir al mınimo el codigo
• Montones de caracterısticas interesantes (¡pero no haytiempo!)
• Validadores, migraciones, observadores
Relaciones y mas
• Casi lo mas importante de ActiveRecord
• Acceder facilmente a modelos relacionados
• Se declaran con ((macros))
• has many, belongs to, has and belongs to, etc.
• Convenciones para reducir al mınimo el codigo
• Montones de caracterısticas interesantes (¡pero no haytiempo!)
• Validadores, migraciones, observadores
Relaciones y mas
• Casi lo mas importante de ActiveRecord
• Acceder facilmente a modelos relacionados
• Se declaran con ((macros))
• has many, belongs to, has and belongs to, etc.
• Convenciones para reducir al mınimo el codigo
• Montones de caracterısticas interesantes (¡pero no haytiempo!)
• Validadores, migraciones, observadores
Relaciones y mas
• Casi lo mas importante de ActiveRecord
• Acceder facilmente a modelos relacionados
• Se declaran con ((macros))
• has many, belongs to, has and belongs to, etc.
• Convenciones para reducir al mınimo el codigo
• Montones de caracterısticas interesantes (¡pero no haytiempo!)
• Validadores, migraciones, observadores
Relaciones y mas
• Casi lo mas importante de ActiveRecord
• Acceder facilmente a modelos relacionados
• Se declaran con ((macros))
• has many, belongs to, has and belongs to, etc.
• Convenciones para reducir al mınimo el codigo
• Montones de caracterısticas interesantes (¡pero no haytiempo!)
• Validadores, migraciones, observadores
Relaciones y mas
• Casi lo mas importante de ActiveRecord
• Acceder facilmente a modelos relacionados
• Se declaran con ((macros))
• has many, belongs to, has and belongs to, etc.
• Convenciones para reducir al mınimo el codigo
• Montones de caracterısticas interesantes (¡pero no haytiempo!)
• Validadores, migraciones, observadores
Relaciones: ejemplos varios
class Curso < ActiveRecord::Basehas_many :documentoshas_many :examenes, :class_name => ’Documento’,
:conditions => "tipo = ’examen’"has_and_belongs_to_many :alumnos, :order => ’nombre’belongs_to :temporada, :class_name => ’AnoAcademico’,
:foreign_key => ’curso_id’end
Relaciones: ejemplos varios
class Curso < ActiveRecord::Basehas_many :documentoshas_many :examenes, :class_name => ’Documento’,
:conditions => "tipo = ’examen’"has_and_belongs_to_many :alumnos, :order => ’nombre’belongs_to :temporada, :class_name => ’AnoAcademico’,
:foreign_key => ’curso_id’end
Relaciones: ejemplos varios
class Curso < ActiveRecord::Basehas_many :documentoshas_many :examenes, :class_name => ’Documento’,
:conditions => "tipo = ’examen’"has_and_belongs_to_many :alumnos, :order => ’nombre’belongs_to :temporada, :class_name => ’AnoAcademico’,
:foreign_key => ’curso_id’end
Relaciones: ejemplos varios
class Curso < ActiveRecord::Basehas_many :documentoshas_many :examenes, :class_name => ’Documento’,
:conditions => "tipo = ’examen’"has_and_belongs_to_many :alumnos, :order => ’nombre’belongs_to :temporada, :class_name => ’AnoAcademico’,
:foreign_key => ’curso_id’end
Relaciones: ejemplos varios
class Curso < ActiveRecord::Basehas_many :documentoshas_many :examenes, :class_name => ’Documento’,
:conditions => "tipo = ’examen’"has_and_belongs_to_many :alumnos, :order => ’nombre’belongs_to :temporada, :class_name => ’AnoAcademico’,
:foreign_key => ’curso_id’end
Ejemplo de modelo (I)
class Cita < ActiveRecord::Basebelongs_to :autor # autor_idhas_many :comentariosdef puntuacionif comentarios.empty?return 0
elsemedia = 0comentarios.each do |com|media += com.puntuacion
endreturn media / comentarios.size
endend
end
Ejemplo de modelo (I)
class Cita < ActiveRecord::Basebelongs_to :autor # autor_idhas_many :comentariosdef puntuacionif comentarios.empty?return 0
elsemedia = 0comentarios.each do |com|media += com.puntuacion
endreturn media / comentarios.size
endend
end
Ejemplo de modelo (I)
class Cita < ActiveRecord::Basebelongs_to :autor # autor_idhas_many :comentariosdef puntuacionif comentarios.empty?return 0
elsemedia = 0comentarios.each do |com|media += com.puntuacion
endreturn media / comentarios.size
endend
end
Ejemplo de modelo (I)
class Cita < ActiveRecord::Basebelongs_to :autor # autor_idhas_many :comentariosdef puntuacionif comentarios.empty?return 0
elsemedia = 0comentarios.each do |com|media += com.puntuacion
endreturn media / comentarios.size
endend
end
Ejemplo de modelo (I)
class Cita < ActiveRecord::Basebelongs_to :autor # autor_idhas_many :comentariosdef puntuacionif comentarios.empty?return 0
elsemedia = 0comentarios.each do |com|media += com.puntuacion
endreturn media / comentarios.size
endend
end
Ejemplo de modelo (I)
class Cita < ActiveRecord::Basebelongs_to :autor # autor_idhas_many :comentariosdef puntuacionif comentarios.empty?return 0
elsemedia = 0comentarios.each do |com|media += com.puntuacion
endreturn media / comentarios.size
endend
end
Ejemplo de modelo (II)
class Autor < ActiveRecord::Baseset_table_name ’autores’has_many :citas
end
Ejemplo de modelo (II)
class Autor < ActiveRecord::Baseset_table_name ’autores’has_many :citas
end
Ejemplo de modelo (II)
class Autor < ActiveRecord::Baseset_table_name ’autores’has_many :citas
end
Miniejercicio
• Crear una base de datos (citas)
• Cargar la definicion de tablas (citas.sql)
• Crear una nueva aplicacion Railsrails citas
• Configurar la base de datosscite config\database.yml
• Crear los modelos y personalizarlosruby script\generate model Autorruby script\generate model Citascite app\models\autor.rb...
• Abrir una consola y crear un par de citasruby script\console
Miniejercicio
• Crear una base de datos (citas)
• Cargar la definicion de tablas (citas.sql)
• Crear una nueva aplicacion Railsrails citas
• Configurar la base de datosscite config\database.yml
• Crear los modelos y personalizarlosruby script\generate model Autorruby script\generate model Citascite app\models\autor.rb...
• Abrir una consola y crear un par de citasruby script\console
Ejemplo de uso interactivo
>> autor = Autor.create(:nombre => ’Fernado Arrabal’)=> #<Autor:0xb74604a8 @new_record=false, ...>>> cita = Cita.create(:texto => "Hablamos del \
mineralismo, ¡cojones ya!", :autor_id => autor)=> #<Cita:0xb744e320 @new_record=false, ...>>> autor.citas << Cita.create(:texto => "¡Dejame \
hablar!")=> [#<Cita:0xb7442354 @attributes={"autor_id"=>"1", ...>]>> autor.citas.size=> 2>> Autor.find(1)=> #<Autor:0xb74490c4 @attributes={"nombre"...>>> Autor.find(2)ActiveRecord::RecordNotFound: Couldn’t find Autor with ID=2...
Ejemplo de uso interactivo
>> autor = Autor.create(:nombre => ’Fernado Arrabal’)=> #<Autor:0xb74604a8 @new_record=false, ...>>> cita = Cita.create(:texto => "Hablamos del \
mineralismo, ¡cojones ya!", :autor_id => autor)=> #<Cita:0xb744e320 @new_record=false, ...>>> autor.citas << Cita.create(:texto => "¡Dejame \
hablar!")=> [#<Cita:0xb7442354 @attributes={"autor_id"=>"1", ...>]>> autor.citas.size=> 2>> Autor.find(1)=> #<Autor:0xb74490c4 @attributes={"nombre"...>>> Autor.find(2)ActiveRecord::RecordNotFound: Couldn’t find Autor with ID=2...
Ejemplo de uso interactivo
>> autor = Autor.create(:nombre => ’Fernado Arrabal’)=> #<Autor:0xb74604a8 @new_record=false, ...>>> cita = Cita.create(:texto => "Hablamos del \
mineralismo, ¡cojones ya!", :autor_id => autor)=> #<Cita:0xb744e320 @new_record=false, ...>>> autor.citas << Cita.create(:texto => "¡Dejame \
hablar!")=> [#<Cita:0xb7442354 @attributes={"autor_id"=>"1", ...>]>> autor.citas.size=> 2>> Autor.find(1)=> #<Autor:0xb74490c4 @attributes={"nombre"...>>> Autor.find(2)ActiveRecord::RecordNotFound: Couldn’t find Autor with ID=2...
Ejemplo de uso interactivo
>> autor = Autor.create(:nombre => ’Fernado Arrabal’)=> #<Autor:0xb74604a8 @new_record=false, ...>>> cita = Cita.create(:texto => "Hablamos del \
mineralismo, ¡cojones ya!", :autor_id => autor)=> #<Cita:0xb744e320 @new_record=false, ...>>> autor.citas << Cita.create(:texto => "¡Dejame \
hablar!")=> [#<Cita:0xb7442354 @attributes={"autor_id"=>"1", ...>]>> autor.citas.size=> 2>> Autor.find(1)=> #<Autor:0xb74490c4 @attributes={"nombre"...>>> Autor.find(2)ActiveRecord::RecordNotFound: Couldn’t find Autor with ID=2...
Ejemplo de uso interactivo
>> autor = Autor.create(:nombre => ’Fernado Arrabal’)=> #<Autor:0xb74604a8 @new_record=false, ...>>> cita = Cita.create(:texto => "Hablamos del \
mineralismo, ¡cojones ya!", :autor_id => autor)=> #<Cita:0xb744e320 @new_record=false, ...>>> autor.citas << Cita.create(:texto => "¡Dejame \
hablar!")=> [#<Cita:0xb7442354 @attributes={"autor_id"=>"1", ...>]>> autor.citas.size=> 2>> Autor.find(1)=> #<Autor:0xb74490c4 @attributes={"nombre"...>>> Autor.find(2)ActiveRecord::RecordNotFound: Couldn’t find Autor with ID=2...
Ejemplo de uso interactivo
>> autor = Autor.create(:nombre => ’Fernado Arrabal’)=> #<Autor:0xb74604a8 @new_record=false, ...>>> cita = Cita.create(:texto => "Hablamos del \
mineralismo, ¡cojones ya!", :autor_id => autor)=> #<Cita:0xb744e320 @new_record=false, ...>>> autor.citas << Cita.create(:texto => "¡Dejame \
hablar!")=> [#<Cita:0xb7442354 @attributes={"autor_id"=>"1", ...>]>> autor.citas.size=> 2>> Autor.find(1)=> #<Autor:0xb74490c4 @attributes={"nombre"...>>> Autor.find(2)ActiveRecord::RecordNotFound: Couldn’t find Autor with ID=2...
Ejemplo de uso interactivo
>> autor = Autor.create(:nombre => ’Fernado Arrabal’)=> #<Autor:0xb74604a8 @new_record=false, ...>>> cita = Cita.create(:texto => "Hablamos del \
mineralismo, ¡cojones ya!", :autor_id => autor)=> #<Cita:0xb744e320 @new_record=false, ...>>> autor.citas << Cita.create(:texto => "¡Dejame \
hablar!")=> [#<Cita:0xb7442354 @attributes={"autor_id"=>"1", ...>]>> autor.citas.size=> 2>> Autor.find(1)=> #<Autor:0xb74490c4 @attributes={"nombre"...>>> Autor.find(2)ActiveRecord::RecordNotFound: Couldn’t find Autor with ID=2...
Ejemplo de uso interactivo
>> autor = Autor.create(:nombre => ’Fernado Arrabal’)=> #<Autor:0xb74604a8 @new_record=false, ...>>> cita = Cita.create(:texto => "Hablamos del \
mineralismo, ¡cojones ya!", :autor_id => autor)=> #<Cita:0xb744e320 @new_record=false, ...>>> autor.citas << Cita.create(:texto => "¡Dejame \
hablar!")=> [#<Cita:0xb7442354 @attributes={"autor_id"=>"1", ...>]>> autor.citas.size=> 2>> Autor.find(1)=> #<Autor:0xb74490c4 @attributes={"nombre"...>>> Autor.find(2)ActiveRecord::RecordNotFound: Couldn’t find Autor with ID=2...
Ejemplo de uso interactivo
>> autor = Autor.create(:nombre => ’Fernado Arrabal’)=> #<Autor:0xb74604a8 @new_record=false, ...>>> cita = Cita.create(:texto => "Hablamos del \
mineralismo, ¡cojones ya!", :autor_id => autor)=> #<Cita:0xb744e320 @new_record=false, ...>>> autor.citas << Cita.create(:texto => "¡Dejame \
hablar!")=> [#<Cita:0xb7442354 @attributes={"autor_id"=>"1", ...>]>> autor.citas.size=> 2>> Autor.find(1)=> #<Autor:0xb74490c4 @attributes={"nombre"...>>> Autor.find(2)ActiveRecord::RecordNotFound: Couldn’t find Autor with ID=2...
Ejemplo de uso interactivo
>> autor = Autor.create(:nombre => ’Fernado Arrabal’)=> #<Autor:0xb74604a8 @new_record=false, ...>>> cita = Cita.create(:texto => "Hablamos del \
mineralismo, ¡cojones ya!", :autor_id => autor)=> #<Cita:0xb744e320 @new_record=false, ...>>> autor.citas << Cita.create(:texto => "¡Dejame \
hablar!")=> [#<Cita:0xb7442354 @attributes={"autor_id"=>"1", ...>]>> autor.citas.size=> 2>> Autor.find(1)=> #<Autor:0xb74490c4 @attributes={"nombre"...>>> Autor.find(2)ActiveRecord::RecordNotFound: Couldn’t find Autor with ID=2...
Ejemplo de uso interactivo
>> autor = Autor.create(:nombre => ’Fernado Arrabal’)=> #<Autor:0xb74604a8 @new_record=false, ...>>> cita = Cita.create(:texto => "Hablamos del \
mineralismo, ¡cojones ya!", :autor_id => autor)=> #<Cita:0xb744e320 @new_record=false, ...>>> autor.citas << Cita.create(:texto => "¡Dejame \
hablar!")=> [#<Cita:0xb7442354 @attributes={"autor_id"=>"1", ...>]>> autor.citas.size=> 2>> Autor.find(1)=> #<Autor:0xb74490c4 @attributes={"nombre"...>>> Autor.find(2)ActiveRecord::RecordNotFound: Couldn’t find Autor with ID=2...
Ejemplo de uso interactivo (II)
>> citas = Cita.find(:all, :conditions =>["texto LIKE :buscar",
{:buscar => ’ %jones %’}])=> [#<Cita:0xb74aba48 @attributes={"autor_id"=>"1",...>]>> Cita.find(:first, :conditions =>
["texto LIKE :buscar",{:buscar => ’ %jones %’}])
=> #<Cita:0xb74aba48 @attributes={"autor_id"=>"1",...>>> citas.size=> 1>> fer = citas[0].autor=> #<Autor:0xb74a6ee4 @attributes={"nombre"=>...}>>> fer.nombre = "Fernando Arrabal POWA"=> "Fernado Arrabal POWA">> fer.save=> true
Ejemplo de uso interactivo (II)
>> citas = Cita.find(:all, :conditions =>["texto LIKE :buscar",
{:buscar => ’ %jones %’}])=> [#<Cita:0xb74aba48 @attributes={"autor_id"=>"1",...>]>> Cita.find(:first, :conditions =>
["texto LIKE :buscar",{:buscar => ’ %jones %’}])
=> #<Cita:0xb74aba48 @attributes={"autor_id"=>"1",...>>> citas.size=> 1>> fer = citas[0].autor=> #<Autor:0xb74a6ee4 @attributes={"nombre"=>...}>>> fer.nombre = "Fernando Arrabal POWA"=> "Fernado Arrabal POWA">> fer.save=> true
Ejemplo de uso interactivo (II)
>> citas = Cita.find(:all, :conditions =>["texto LIKE :buscar",
{:buscar => ’ %jones %’}])=> [#<Cita:0xb74aba48 @attributes={"autor_id"=>"1",...>]>> Cita.find(:first, :conditions =>
["texto LIKE :buscar",{:buscar => ’ %jones %’}])
=> #<Cita:0xb74aba48 @attributes={"autor_id"=>"1",...>>> citas.size=> 1>> fer = citas[0].autor=> #<Autor:0xb74a6ee4 @attributes={"nombre"=>...}>>> fer.nombre = "Fernando Arrabal POWA"=> "Fernado Arrabal POWA">> fer.save=> true
Ejemplo de uso interactivo (II)
>> citas = Cita.find(:all, :conditions =>["texto LIKE :buscar",
{:buscar => ’ %jones %’}])=> [#<Cita:0xb74aba48 @attributes={"autor_id"=>"1",...>]>> Cita.find(:first, :conditions =>
["texto LIKE :buscar",{:buscar => ’ %jones %’}])
=> #<Cita:0xb74aba48 @attributes={"autor_id"=>"1",...>>> citas.size=> 1>> fer = citas[0].autor=> #<Autor:0xb74a6ee4 @attributes={"nombre"=>...}>>> fer.nombre = "Fernando Arrabal POWA"=> "Fernado Arrabal POWA">> fer.save=> true
Ejemplo de uso interactivo (II)
>> citas = Cita.find(:all, :conditions =>["texto LIKE :buscar",
{:buscar => ’ %jones %’}])=> [#<Cita:0xb74aba48 @attributes={"autor_id"=>"1",...>]>> Cita.find(:first, :conditions =>
["texto LIKE :buscar",{:buscar => ’ %jones %’}])
=> #<Cita:0xb74aba48 @attributes={"autor_id"=>"1",...>>> citas.size=> 1>> fer = citas[0].autor=> #<Autor:0xb74a6ee4 @attributes={"nombre"=>...}>>> fer.nombre = "Fernando Arrabal POWA"=> "Fernado Arrabal POWA">> fer.save=> true
Ejemplo de uso interactivo (II)
>> citas = Cita.find(:all, :conditions =>["texto LIKE :buscar",
{:buscar => ’ %jones %’}])=> [#<Cita:0xb74aba48 @attributes={"autor_id"=>"1",...>]>> Cita.find(:first, :conditions =>
["texto LIKE :buscar",{:buscar => ’ %jones %’}])
=> #<Cita:0xb74aba48 @attributes={"autor_id"=>"1",...>>> citas.size=> 1>> fer = citas[0].autor=> #<Autor:0xb74a6ee4 @attributes={"nombre"=>...}>>> fer.nombre = "Fernando Arrabal POWA"=> "Fernado Arrabal POWA">> fer.save=> true
Ejemplo de uso interactivo (II)
>> citas = Cita.find(:all, :conditions =>["texto LIKE :buscar",
{:buscar => ’ %jones %’}])=> [#<Cita:0xb74aba48 @attributes={"autor_id"=>"1",...>]>> Cita.find(:first, :conditions =>
["texto LIKE :buscar",{:buscar => ’ %jones %’}])
=> #<Cita:0xb74aba48 @attributes={"autor_id"=>"1",...>>> citas.size=> 1>> fer = citas[0].autor=> #<Autor:0xb74a6ee4 @attributes={"nombre"=>...}>>> fer.nombre = "Fernando Arrabal POWA"=> "Fernado Arrabal POWA">> fer.save=> true
Ejemplo de uso interactivo (II)
>> citas = Cita.find(:all, :conditions =>["texto LIKE :buscar",
{:buscar => ’ %jones %’}])=> [#<Cita:0xb74aba48 @attributes={"autor_id"=>"1",...>]>> Cita.find(:first, :conditions =>
["texto LIKE :buscar",{:buscar => ’ %jones %’}])
=> #<Cita:0xb74aba48 @attributes={"autor_id"=>"1",...>>> citas.size=> 1>> fer = citas[0].autor=> #<Autor:0xb74a6ee4 @attributes={"nombre"=>...}>>> fer.nombre = "Fernando Arrabal POWA"=> "Fernado Arrabal POWA">> fer.save=> true
Ejemplo de uso interactivo (II)
>> citas = Cita.find(:all, :conditions =>["texto LIKE :buscar",
{:buscar => ’ %jones %’}])=> [#<Cita:0xb74aba48 @attributes={"autor_id"=>"1",...>]>> Cita.find(:first, :conditions =>
["texto LIKE :buscar",{:buscar => ’ %jones %’}])
=> #<Cita:0xb74aba48 @attributes={"autor_id"=>"1",...>>> citas.size=> 1>> fer = citas[0].autor=> #<Autor:0xb74a6ee4 @attributes={"nombre"=>...}>>> fer.nombre = "Fernando Arrabal POWA"=> "Fernado Arrabal POWA">> fer.save=> true
Ejemplo de uso interactivo (II)
>> citas = Cita.find(:all, :conditions =>["texto LIKE :buscar",
{:buscar => ’ %jones %’}])=> [#<Cita:0xb74aba48 @attributes={"autor_id"=>"1",...>]>> Cita.find(:first, :conditions =>
["texto LIKE :buscar",{:buscar => ’ %jones %’}])
=> #<Cita:0xb74aba48 @attributes={"autor_id"=>"1",...>>> citas.size=> 1>> fer = citas[0].autor=> #<Autor:0xb74a6ee4 @attributes={"nombre"=>...}>>> fer.nombre = "Fernando Arrabal POWA"=> "Fernado Arrabal POWA">> fer.save=> true
Ejemplo de uso interactivo (II)
>> citas = Cita.find(:all, :conditions =>["texto LIKE :buscar",
{:buscar => ’ %jones %’}])=> [#<Cita:0xb74aba48 @attributes={"autor_id"=>"1",...>]>> Cita.find(:first, :conditions =>
["texto LIKE :buscar",{:buscar => ’ %jones %’}])
=> #<Cita:0xb74aba48 @attributes={"autor_id"=>"1",...>>> citas.size=> 1>> fer = citas[0].autor=> #<Autor:0xb74a6ee4 @attributes={"nombre"=>...}>>> fer.nombre = "Fernando Arrabal POWA"=> "Fernado Arrabal POWA">> fer.save=> true
Ejemplo de uso interactivo (II)
>> citas = Cita.find(:all, :conditions =>["texto LIKE :buscar",
{:buscar => ’ %jones %’}])=> [#<Cita:0xb74aba48 @attributes={"autor_id"=>"1",...>]>> Cita.find(:first, :conditions =>
["texto LIKE :buscar",{:buscar => ’ %jones %’}])
=> #<Cita:0xb74aba48 @attributes={"autor_id"=>"1",...>>> citas.size=> 1>> fer = citas[0].autor=> #<Autor:0xb74a6ee4 @attributes={"nombre"=>...}>>> fer.nombre = "Fernando Arrabal POWA"=> "Fernado Arrabal POWA">> fer.save=> true
Indice
1 IntroduccionLa revolucion del desarrollo webMVCOtras comodidades
2 Cada componente en detalleActiveRecordActionPackEnlaces
ActionPack
• Bisagra de todo el cotarro
• Recibe las peticiones y las ejecuta
• Cada controlador es una clase Ruby
• Cada accion es un metodo del controlador
• Las direcciones son del estilo URL/controlador/accion/id
• Realmente se pueden cambiar (rutas)
• Nuevo controlador → ./script/generate controller Foo
ActionPack
• Bisagra de todo el cotarro
• Recibe las peticiones y las ejecuta
• Cada controlador es una clase Ruby
• Cada accion es un metodo del controlador
• Las direcciones son del estilo URL/controlador/accion/id
• Realmente se pueden cambiar (rutas)
• Nuevo controlador → ./script/generate controller Foo
ActionPack
• Bisagra de todo el cotarro
• Recibe las peticiones y las ejecuta
• Cada controlador es una clase Ruby
• Cada accion es un metodo del controlador
• Las direcciones son del estilo URL/controlador/accion/id
• Realmente se pueden cambiar (rutas)
• Nuevo controlador → ./script/generate controller Foo
ActionPack
• Bisagra de todo el cotarro
• Recibe las peticiones y las ejecuta
• Cada controlador es una clase Ruby
• Cada accion es un metodo del controlador
• Las direcciones son del estilo URL/controlador/accion/id
• Realmente se pueden cambiar (rutas)
• Nuevo controlador → ./script/generate controller Foo
ActionPack
• Bisagra de todo el cotarro
• Recibe las peticiones y las ejecuta
• Cada controlador es una clase Ruby
• Cada accion es un metodo del controlador
• Las direcciones son del estilo URL/controlador/accion/id
• Realmente se pueden cambiar (rutas)
• Nuevo controlador → ./script/generate controller Foo
ActionPack
• Bisagra de todo el cotarro
• Recibe las peticiones y las ejecuta
• Cada controlador es una clase Ruby
• Cada accion es un metodo del controlador
• Las direcciones son del estilo URL/controlador/accion/id
• Realmente se pueden cambiar (rutas)
• Nuevo controlador → ./script/generate controller Foo
ActionPack
• Bisagra de todo el cotarro
• Recibe las peticiones y las ejecuta
• Cada controlador es una clase Ruby
• Cada accion es un metodo del controlador
• Las direcciones son del estilo URL/controlador/accion/id
• Realmente se pueden cambiar (rutas)
• Nuevo controlador → ./script/generate controller Foo
Ejemplo de controlador
class PruebasController < ApplicationControllerdef accion
render(:text => "Escribo algo sin plantillas")end
def plantilla@citas = Cita.find(:all, :order => ’autor_id’)
end
def calculin# Hacemos algun calculoredirect_to(:action => ’plantilla’)
endend
Ejemplo de controlador
class PruebasController < ApplicationControllerdef accion
render(:text => "Escribo algo sin plantillas")end
def plantilla@citas = Cita.find(:all, :order => ’autor_id’)
end
def calculin# Hacemos algun calculoredirect_to(:action => ’plantilla’)
endend
Ejemplo de controlador
class PruebasController < ApplicationControllerdef accion
render(:text => "Escribo algo sin plantillas")end
def plantilla@citas = Cita.find(:all, :order => ’autor_id’)
end
def calculin# Hacemos algun calculoredirect_to(:action => ’plantilla’)
endend
Ejemplo de controlador
class PruebasController < ApplicationControllerdef accion
render(:text => "Escribo algo sin plantillas")end
def plantilla@citas = Cita.find(:all, :order => ’autor_id’)
end
def calculin# Hacemos algun calculoredirect_to(:action => ’plantilla’)
endend
Ejemplo de controlador
class PruebasController < ApplicationControllerdef accion
render(:text => "Escribo algo sin plantillas")end
def plantilla@citas = Cita.find(:all, :order => ’autor_id’)
end
def calculin# Hacemos algun calculoredirect_to(:action => ’plantilla’)
endend
Ejemplo de controlador
class PruebasController < ApplicationControllerdef accion
render(:text => "Escribo algo sin plantillas")end
def plantilla@citas = Cita.find(:all, :order => ’autor_id’)
end
def calculin# Hacemos algun calculoredirect_to(:action => ’plantilla’)
endend
Ejemplo de controlador
class PruebasController < ApplicationControllerdef accion
render(:text => "Escribo algo sin plantillas")end
def plantilla@citas = Cita.find(:all, :order => ’autor_id’)
end
def calculin# Hacemos algun calculoredirect_to(:action => ’plantilla’)
endend
Ejemplo de controlador
class PruebasController < ApplicationControllerdef accion
render(:text => "Escribo algo sin plantillas")end
def plantilla@citas = Cita.find(:all, :order => ’autor_id’)
end
def calculin# Hacemos algun calculoredirect_to(:action => ’plantilla’)
endend
Ejercicio guiado
• Crear un controlador pruebaruby script\generate controllerprueba
• Arrancar el servidor WEBrickruby script\server
• Crear una accion de prueba, con y sinplantillascite app\controllers\prueba...
• Probar que funciona como se espera
• Mostrar las citas de la BDD
• Crear un andamio para las citasruby script\generate scaffoldCita
Ejercicio guiado
• Crear un controlador pruebaruby script\generate controllerprueba
• Arrancar el servidor WEBrickruby script\server
• Crear una accion de prueba, con y sinplantillascite app\controllers\prueba...
• Probar que funciona como se espera
• Mostrar las citas de la BDD
• Crear un andamio para las citasruby script\generate scaffoldCita
Ejercicio guiado
• Crear un controlador pruebaruby script\generate controllerprueba
• Arrancar el servidor WEBrickruby script\server
• Crear una accion de prueba, con y sinplantillascite app\controllers\prueba...
• Probar que funciona como se espera
• Mostrar las citas de la BDD
• Crear un andamio para las citasruby script\generate scaffoldCita
Ejercicio guiado
• Crear un controlador pruebaruby script\generate controllerprueba
• Arrancar el servidor WEBrickruby script\server
• Crear una accion de prueba, con y sinplantillascite app\controllers\prueba...
• Probar que funciona como se espera
• Mostrar las citas de la BDD
• Crear un andamio para las citasruby script\generate scaffoldCita
Ejercicio guiado
• Crear un controlador pruebaruby script\generate controllerprueba
• Arrancar el servidor WEBrickruby script\server
• Crear una accion de prueba, con y sinplantillascite app\controllers\prueba...
• Probar que funciona como se espera
• Mostrar las citas de la BDD
• Crear un andamio para las citasruby script\generate scaffoldCita
Ejercicio guiado
• Crear un controlador pruebaruby script\generate controllerprueba
• Arrancar el servidor WEBrickruby script\server
• Crear una accion de prueba, con y sinplantillascite app\controllers\prueba...
• Probar que funciona como se espera
• Mostrar las citas de la BDD
• Crear un andamio para las citasruby script\generate scaffoldCita
Un par de virguerıas mas
• Crear un andamio para los autoresruby script\generate scaffold Autor
• ¡Argh, no funciona!
• Arreglamos las citas anonimasscite app\views\citas...
• Anadimos citas por Ajax
• Anadimos algun truco mono en la vuelta del Ajax
Un par de virguerıas mas
• Crear un andamio para los autoresruby script\generate scaffold Autor
• ¡Argh, no funciona!
• Arreglamos las citas anonimasscite app\views\citas...
• Anadimos citas por Ajax
• Anadimos algun truco mono en la vuelta del Ajax
Un par de virguerıas mas
• Crear un andamio para los autoresruby script\generate scaffold Autor
• ¡Argh, no funciona! (Mi no hablo espanolo)scite config\environment.rb
• Arreglamos las citas anonimasscite app\views\citas...
• Anadimos citas por Ajax
• Anadimos algun truco mono en la vuelta del Ajax
Un par de virguerıas mas
• Crear un andamio para los autoresruby script\generate scaffold Autor
• ¡Argh, no funciona! (Mi no hablo espanolo)scite config\environment.rb
• Arreglamos las citas anonimasscite app\views\citas...
• Anadimos citas por Ajax
• Anadimos algun truco mono en la vuelta del Ajax
Un par de virguerıas mas
• Crear un andamio para los autoresruby script\generate scaffold Autor
• ¡Argh, no funciona! (Mi no hablo espanolo)scite config\environment.rb
• Arreglamos las citas anonimasscite app\views\citas...
• Anadimos citas por Ajax
• Anadimos algun truco mono en la vuelta del Ajax
Un par de virguerıas mas
• Crear un andamio para los autoresruby script\generate scaffold Autor
• ¡Argh, no funciona! (Mi no hablo espanolo)scite config\environment.rb
• Arreglamos las citas anonimasscite app\views\citas...
• Anadimos citas por Ajax
• Anadimos algun truco mono en la vuelta del Ajax
Ejercicio
• Poner una caja con autocompletado de autoreshttp://demo.script.aculo.us/ajax/autocompleter
• Con eso, implementar una busqueda de citas de ese autorhttp://localhost:3000/autores/citas de
Ejercicio
• Poner una caja con autocompletado de autoreshttp://demo.script.aculo.us/ajax/autocompleter
• Con eso, implementar una busqueda de citas de ese autorhttp://localhost:3000/autores/citas de
Mas cosas interesantes
• Plantillas generales, plantillas parciales
• send file, send data
• Filtros: before filter, after filter
• Entornos de programacion
• ActionMailer
• Rutas
• Extensiones al lenguaje Ruby
• Helpers de texto y otros
Mas cosas interesantes
• Plantillas generales, plantillas parciales
• send file, send data
• Filtros: before filter, after filter
• Entornos de programacion
• ActionMailer
• Rutas
• Extensiones al lenguaje Ruby
• Helpers de texto y otros
Mas cosas interesantes
• Plantillas generales, plantillas parciales
• send file, send data
• Filtros: before filter, after filter
• Entornos de programacion
• ActionMailer
• Rutas
• Extensiones al lenguaje Ruby
• Helpers de texto y otros
Mas cosas interesantes
• Plantillas generales, plantillas parciales
• send file, send data
• Filtros: before filter, after filter
• Entornos de programacion
• ActionMailer
• Rutas
• Extensiones al lenguaje Ruby
• Helpers de texto y otros
Mas cosas interesantes
• Plantillas generales, plantillas parciales
• send file, send data
• Filtros: before filter, after filter
• Entornos de programacion
• ActionMailer
• Rutas
• Extensiones al lenguaje Ruby
• Helpers de texto y otros
Mas cosas interesantes
• Plantillas generales, plantillas parciales
• send file, send data
• Filtros: before filter, after filter
• Entornos de programacion
• ActionMailer
• Rutas
• Extensiones al lenguaje Ruby
• Helpers de texto y otros
Mas cosas interesantes
• Plantillas generales, plantillas parciales
• send file, send data
• Filtros: before filter, after filter
• Entornos de programacion
• ActionMailer
• Rutas
• Extensiones al lenguaje Ruby
• Helpers de texto y otros
Mas cosas interesantes
• Plantillas generales, plantillas parciales
• send file, send data
• Filtros: before filter, after filter
• Entornos de programacion
• ActionMailer
• Rutas
• Extensiones al lenguaje Ruby
• Helpers de texto y otros
Indice
1 IntroduccionLa revolucion del desarrollo webMVCOtras comodidades
2 Cada componente en detalleActiveRecordActionPackEnlaces
Enlaces
• http://www.ferorcarril.com
• http://the-cocktail.com/docs/rails1/
• http://the-cocktail.com/docs/rails2/
• http://www.ruby.org.es
• http://www.rubyonrails.com
• http://api.rubyonrails.com
• http://www.ruby-lang.org
• http://www.zingzang.org
¡Manana mas!
Recommended