SlideShare una empresa de Scribd logo
1 de 32
Ruby on Rails
   Pedro Visintin
Dale un pescado a un hombre...

...Y LO ALIMENTARÁS POR UN DÍA. Enseñale a pescar, y lo
               alimentarás por una vida.
Desarrollo Web

• HTML algo así como reportes
• con JavaScript algo de código
• con CSS otro lenguaje más para
  complicarle la vida al programador y al
  diseñador gráfico
• deadlines asesinos y cambios constantes
• Una hermosa RDBMS para persistencia
Un framework Web
• Orientado a Objetos
• ORM (ó document oriented database?)
• REST
• Mailer
• Rendering
• Javascript Glue
ex
                           sodero
                            (cajón
                              de
                            soda)



Yukihiro Matsumoto creador de Ruby
Jopo
       web 2.0




David Heinemeier Hansson. Creador de
                Rails
Como nos sentimos
    programando?

• DRY (do not repeat yourself)
• Convention Over Configuration
• Pensado en el programador, no el la
  máquina
las aplicaciones no
 escalan montañas
Rendering
• ActionView
• erb
• haml
• otros
• view.mime-type.rendering-engine =
  index.html.haml
erb rendering
<h1>Product<%= @product.name %></h1>
<ul>
<% @product.comments.each do |comment| %>
<li><%= comment.subject %></li>
<% end %>
</ul>
ActionPack


• ActionView
• ActionController
Hablemos de Recursos
REST

• interfaz polimórfica
• stateless
• un recurso multiples representaciones
Resources on Rails
                               map.resources :products




                          rake routes | grep product
      products GET /products(.:format) {:action=>"index", :controller=>"products"}
             POST /products(.:format) {:action=>"create", :controller=>"products"}
 new_product GET /products/new(.:format) {:action=>"new", :controller=>"products"}
edit_product GET /products/:id/edit(.:format) {:action=>"edit", :controller=>"products"}
       product GET /products/:id(.:format) {:action=>"show", :controller=>"products"}
            PUT /products/:id(.:format) {:action=>"update", :controller=>"products"}
          DELETE /products/:id(.:format) {:action=>"destroy", :controller=>"products"}
Resources on Rails
                      map.resources :products, :has_many                                 => [ :comments]

                                                           rake routes|grep product
                                 products GET /products(.:format)                {:action=>"index", :controller=>"products"}
                                       POST /products(.:format)                {:action=>"create", :controller=>"products"}
                              new_product GET /products/new(.:format)                {:action=>"new", :controller=>"products"}
                              edit_product GET /products/:id/edit(.:format)         {:action=>"edit", :controller=>"products"}
                                  product GET /products/:id(.:format)            {:action=>"show", :controller=>"products"}
                                       PUT /products/:id(.:format)            {:action=>"update", :controller=>"products"}
                                      DELETE /products/:id(.:format)           {:action=>"destroy", :controller=>"products"}



    product_comments GET /products/:product_id/comments(.:format) {:action=>"index", :controller=>"comments"}

                   POST /products/:product_id/comments(.:format) {:action=>"create", :controller=>"comments"}

 new_product_comment GET /products/:product_id/comments/new(.:format) {:action=>"new", :controller=>"comments"}

edit_product_comment GET /products/:product_id/comments/:id/edit(.:format){ :action=>"edit", :controller=>"comments"}

    product_comment GET      /products/:product_id/comments/:id(.:format) {:action=>"show", :controller=>"comments"}

                  PUT    /products/:product_id/comments/:id(.:format) {:action=>"update", :controller=>"comments"}

                DELETE /products/:product_id/comments/:id(.:format) {:action=>"destroy", :controller=>"comments"}
ActionController
class ProductsController < ApplicationController
   def index
   end
   def new
   end
   def edit
   end
   def show
   end
   def create
   end
   def update
   end
   def destroy
   end
end
request cycle
   http://localhost:3000/products/123

class ProductsController < ApplicationController
def show
  @product = Product.find(params[:id])
end

RAILS_ROOT/apps/views/products/show.html.erb
Tu vida es
Orientada a
 Objetos?
The Orm: ActiveRecord

•   persiste transparentemente a un RDBMS a través de adapters

•   se escribe muy poco SQL casi nada

•   provee macros para asociaciones

•   provee validaciones

•   provee callbacks en los instantes necesarios

•   (named scopes) provee asociar metodos a queries predefinidos
    y anidarlos indefinidamente

•   soporte de transacciones

•   soporte de observers

•   reflections en asociaciones y agregaciones
complementos y otros
•   Manejo automático de entornos

•   Generators

•   Consola

•   Log

•   Rake

•   Migrations

•   Testing
Una Clase ActiveRecord


 Class Product < ActiveRecord::Base
 end
El soporte en la BD
class CreateProducts < ActiveRecord::Migration
  def self.up
    create_table :products do |t|
      t.string :name, :limit => 100
      t.timestamps
    end
  end

  def self.down
    drop_table :products
  end
end
Una Clase ActiveRecord
 Class Product < ActiveRecord::Base
  has_many :comments
  validates_presence_of :name
  validates_uniqueness_of :name
  before_save :generate_code
 end
Migrations

• es donde se definen las tablas para
  persistencia
• versionado del diseño de tablas del RDBMS
• permite ir hacia adelante o hacia atrás
• nos desliga del SQL
Qué es Rake?
•   es un make hecho en ruby para ruby

•   rails usa rake para automatizar tareas

    •   crear bases de datos

    •   actualizar scripts

    •   migraciones

    •   etc

•   rake tiene dependencias de tareas a ejecutar
Metodologías?

• BDD
• TDD
• HLQSMC (hago lo que se me canta)
• FDD (faso driven development)
• Otras
BDD con Rspec
describe Project do
  describe “creating” do
    it “should validate uniqueness of name” do
       Project.create!(:name=>‘proj’)
       Project.new(:name=>‘proj’).should_not be_valid
    end
  end
end
Entornos de Desarrollo

• Emacs
• Vi
• Textmate (mac os)
• Notepad++
• Netbeans (para los que le gustan las IDE)
bolario?
Preguntas? (si hay tiempo)
Referencias
• http://guides.rubyonrails.org/
• http://www.javapassion.com/rubyonrails/
  #Ruby_On_Rails_Basics
• http://www.rubyonrails.org/
• http://lista.rubyargentina.com.ar/
• http://blogs.onrails.com.ar
hola@pedrovisintin.com
http://www.pedrovisintin.com

Más contenido relacionado

Similar a Presentación Ruby on Rails en Softare Freedom Day 09 Buenos Aires

Presentacion Ruby on Rails en Universidad Autónoma 2009
Presentacion Ruby on Rails en Universidad Autónoma 2009Presentacion Ruby on Rails en Universidad Autónoma 2009
Presentacion Ruby on Rails en Universidad Autónoma 2009Nelson Rojas Núñez
 
Descubriendo Ruby on Rails (Desarrollo Agil de Aplicaciones Web)
Descubriendo Ruby on Rails (Desarrollo Agil de Aplicaciones Web)Descubriendo Ruby on Rails (Desarrollo Agil de Aplicaciones Web)
Descubriendo Ruby on Rails (Desarrollo Agil de Aplicaciones Web)lenny
 
Descubriendo Ruby On Rails (Desarrollo Agil De Aplicaciones Web)
Descubriendo Ruby On Rails (Desarrollo Agil De Aplicaciones Web)Descubriendo Ruby On Rails (Desarrollo Agil De Aplicaciones Web)
Descubriendo Ruby On Rails (Desarrollo Agil De Aplicaciones Web)INSIGNIA4U
 
Ruby On Rails Intro
Ruby On Rails IntroRuby On Rails Intro
Ruby On Rails IntroThirdWay
 
Desarrollo de Apps Web en Ruby on Rails
Desarrollo de Apps Web en Ruby on RailsDesarrollo de Apps Web en Ruby on Rails
Desarrollo de Apps Web en Ruby on RailsFreelancer
 
CrossDvlpu - REACT para desarrolladores de ASP.NET
CrossDvlpu - REACT para desarrolladores de ASP.NETCrossDvlpu - REACT para desarrolladores de ASP.NET
CrossDvlpu - REACT para desarrolladores de ASP.NETAlberto Diaz Martin
 
Cross development - React para desarrolladores de asp.net
Cross development - React para desarrolladores de asp.netCross development - React para desarrolladores de asp.net
Cross development - React para desarrolladores de asp.netAlberto Diaz Martin
 
Exposicion Akelos
Exposicion AkelosExposicion Akelos
Exposicion Akelosdokeosla
 
El Ferrocarril Contra Los Arboles Muertos2
El Ferrocarril Contra Los Arboles Muertos2El Ferrocarril Contra Los Arboles Muertos2
El Ferrocarril Contra Los Arboles Muertos2ferdinand13
 
API REST conceptos (Rails-api)
API REST conceptos (Rails-api)API REST conceptos (Rails-api)
API REST conceptos (Rails-api)Daryl Moreno
 
Intro a cakephp
Intro a cakephpIntro a cakephp
Intro a cakephpbetabeers
 
Todo lo que necesitas saber sobre Drupal 8
Todo lo que necesitas saber sobre Drupal 8Todo lo que necesitas saber sobre Drupal 8
Todo lo que necesitas saber sobre Drupal 8Acquia
 

Similar a Presentación Ruby on Rails en Softare Freedom Day 09 Buenos Aires (20)

Todomir
TodomirTodomir
Todomir
 
Presentacion Ruby on Rails en Universidad Autónoma 2009
Presentacion Ruby on Rails en Universidad Autónoma 2009Presentacion Ruby on Rails en Universidad Autónoma 2009
Presentacion Ruby on Rails en Universidad Autónoma 2009
 
Descubriendo Ruby on Rails (Desarrollo Agil de Aplicaciones Web)
Descubriendo Ruby on Rails (Desarrollo Agil de Aplicaciones Web)Descubriendo Ruby on Rails (Desarrollo Agil de Aplicaciones Web)
Descubriendo Ruby on Rails (Desarrollo Agil de Aplicaciones Web)
 
Descubriendo Ruby On Rails (Desarrollo Agil De Aplicaciones Web)
Descubriendo Ruby On Rails (Desarrollo Agil De Aplicaciones Web)Descubriendo Ruby On Rails (Desarrollo Agil De Aplicaciones Web)
Descubriendo Ruby On Rails (Desarrollo Agil De Aplicaciones Web)
 
Rails intro
Rails introRails intro
Rails intro
 
Ruby On Rails Intro
Ruby On Rails IntroRuby On Rails Intro
Ruby On Rails Intro
 
ASP.NET MVC
ASP.NET MVCASP.NET MVC
ASP.NET MVC
 
Desarrollo de Apps Web en Ruby on Rails
Desarrollo de Apps Web en Ruby on RailsDesarrollo de Apps Web en Ruby on Rails
Desarrollo de Apps Web en Ruby on Rails
 
CrossDvlpu - REACT para desarrolladores de ASP.NET
CrossDvlpu - REACT para desarrolladores de ASP.NETCrossDvlpu - REACT para desarrolladores de ASP.NET
CrossDvlpu - REACT para desarrolladores de ASP.NET
 
Cross development - React para desarrolladores de asp.net
Cross development - React para desarrolladores de asp.netCross development - React para desarrolladores de asp.net
Cross development - React para desarrolladores de asp.net
 
ASP.NET MVC Workshop Día 3
ASP.NET MVC Workshop Día 3ASP.NET MVC Workshop Día 3
ASP.NET MVC Workshop Día 3
 
Exposicion Akelos
Exposicion AkelosExposicion Akelos
Exposicion Akelos
 
El Ferrocarril Contra Los Arboles Muertos2
El Ferrocarril Contra Los Arboles Muertos2El Ferrocarril Contra Los Arboles Muertos2
El Ferrocarril Contra Los Arboles Muertos2
 
Full-stack JavaScript: Desarrollo integral de aplicaciones Web con JavaScript
Full-stack JavaScript: Desarrollo integral de aplicaciones Web con JavaScriptFull-stack JavaScript: Desarrollo integral de aplicaciones Web con JavaScript
Full-stack JavaScript: Desarrollo integral de aplicaciones Web con JavaScript
 
Android Superstar - Buenas Prácticas
Android Superstar - Buenas PrácticasAndroid Superstar - Buenas Prácticas
Android Superstar - Buenas Prácticas
 
Intro a cakephp
Intro a cakephpIntro a cakephp
Intro a cakephp
 
API REST conceptos (Rails-api)
API REST conceptos (Rails-api)API REST conceptos (Rails-api)
API REST conceptos (Rails-api)
 
Intro a cakephp
Intro a cakephpIntro a cakephp
Intro a cakephp
 
Todo lo que necesitas saber sobre Drupal 8
Todo lo que necesitas saber sobre Drupal 8Todo lo que necesitas saber sobre Drupal 8
Todo lo que necesitas saber sobre Drupal 8
 
#Cappacitate2015 Bogota
#Cappacitate2015 Bogota#Cappacitate2015 Bogota
#Cappacitate2015 Bogota
 

Último

De Olmos Santiago_Dolores _ M1S3AI6.pptx
De Olmos Santiago_Dolores _ M1S3AI6.pptxDe Olmos Santiago_Dolores _ M1S3AI6.pptx
De Olmos Santiago_Dolores _ M1S3AI6.pptxdoloresolmosantiago
 
editorial de informática de los sueños.docx
editorial de informática de los sueños.docxeditorial de informática de los sueños.docx
editorial de informática de los sueños.docxssusere34b451
 
avancestecnologicossigloveintiunoprofetengohambreayuda
avancestecnologicossigloveintiunoprofetengohambreayudaavancestecnologicossigloveintiunoprofetengohambreayuda
avancestecnologicossigloveintiunoprofetengohambreayudadocente
 
Electricidad Libro compendio de temas estudiados.docx
Electricidad Libro compendio de temas estudiados.docxElectricidad Libro compendio de temas estudiados.docx
Electricidad Libro compendio de temas estudiados.docxCsarNlsonMrquezContr
 
Redes Neuronales profundas convolucionales CNN ́s-1.pdf
Redes Neuronales profundas convolucionales CNN ́s-1.pdfRedes Neuronales profundas convolucionales CNN ́s-1.pdf
Redes Neuronales profundas convolucionales CNN ́s-1.pdfJosAndrRosarioVzquez
 
Chat GPT para la educación Latinoamerica
Chat GPT para la educación LatinoamericaChat GPT para la educación Latinoamerica
Chat GPT para la educación LatinoamericaEdwinGarca59
 
Introduccion-a-la-electronica-industrial.pptx
Introduccion-a-la-electronica-industrial.pptxIntroduccion-a-la-electronica-industrial.pptx
Introduccion-a-la-electronica-industrial.pptxcj12paz
 
herramientas web para estudiantes interesados en el tema
herramientas web para estudiantes interesados en el temaherramientas web para estudiantes interesados en el tema
herramientas web para estudiantes interesados en el temaJadeVilcscordova
 
BUSCADORES DE INTERNET (Universidad de Sonora).
BUSCADORES DE INTERNET (Universidad de Sonora).BUSCADORES DE INTERNET (Universidad de Sonora).
BUSCADORES DE INTERNET (Universidad de Sonora).jcaballerosamayoa
 
JORNADA INTELIGENCIA ARTIFICIAL Y REALIDAD VIRTUAL
JORNADA INTELIGENCIA ARTIFICIAL Y REALIDAD VIRTUALJORNADA INTELIGENCIA ARTIFICIAL Y REALIDAD VIRTUAL
JORNADA INTELIGENCIA ARTIFICIAL Y REALIDAD VIRTUALGuadalinfoHuscarGuad
 
innovacion banking & warehouse 2024 blog
innovacion banking & warehouse 2024 bloginnovacion banking & warehouse 2024 blog
innovacion banking & warehouse 2024 blogManuel Diaz
 
Tipos de Datos de Microsoft Access-JOEL GARCIA.pptx
Tipos de Datos de Microsoft Access-JOEL GARCIA.pptxTipos de Datos de Microsoft Access-JOEL GARCIA.pptx
Tipos de Datos de Microsoft Access-JOEL GARCIA.pptxJOELGARCIA849853
 
Navegadores de internet - Nuevas Tecnologías de la Información y la Comunicación
Navegadores de internet - Nuevas Tecnologías de la Información y la ComunicaciónNavegadores de internet - Nuevas Tecnologías de la Información y la Comunicación
Navegadores de internet - Nuevas Tecnologías de la Información y la ComunicaciónAntonia Yamilet Perez Palomares
 
Desarrollo del Dominio del Internet - Estrada
Desarrollo del Dominio del Internet - EstradaDesarrollo del Dominio del Internet - Estrada
Desarrollo del Dominio del Internet - EstradaRicardoEstrada90
 
Uso de las TIC en la vida cotidiana .
Uso de las TIC en la vida cotidiana       .Uso de las TIC en la vida cotidiana       .
Uso de las TIC en la vida cotidiana .itzyrivera61103
 
Imágenes digitales: Calidad de la información
Imágenes digitales: Calidad de la informaciónImágenes digitales: Calidad de la información
Imágenes digitales: Calidad de la informaciónUniversidad de Sonora
 
Ejercicio 1 periodo 2 de Tecnología 2024
Ejercicio 1 periodo 2 de Tecnología 2024Ejercicio 1 periodo 2 de Tecnología 2024
Ejercicio 1 periodo 2 de Tecnología 2024NicolleAndrade7
 
Tipos de datos en Microsoft Access de Base de Datos
Tipos de datos en Microsoft Access de Base de DatosTipos de datos en Microsoft Access de Base de Datos
Tipos de datos en Microsoft Access de Base de DatosYOMIRAVILLARREAL1
 
el uso de las TIC en la vida cotidiana.pptx
el uso de las TIC en la vida cotidiana.pptxel uso de las TIC en la vida cotidiana.pptx
el uso de las TIC en la vida cotidiana.pptx221112876
 
PRÁCTICA Nº 4: “Análisis de secuencias del ADN con el software BioEdit y uso ...
PRÁCTICA Nº 4: “Análisis de secuencias del ADN con el software BioEdit y uso ...PRÁCTICA Nº 4: “Análisis de secuencias del ADN con el software BioEdit y uso ...
PRÁCTICA Nº 4: “Análisis de secuencias del ADN con el software BioEdit y uso ...dramosbrise1403
 

Último (20)

De Olmos Santiago_Dolores _ M1S3AI6.pptx
De Olmos Santiago_Dolores _ M1S3AI6.pptxDe Olmos Santiago_Dolores _ M1S3AI6.pptx
De Olmos Santiago_Dolores _ M1S3AI6.pptx
 
editorial de informática de los sueños.docx
editorial de informática de los sueños.docxeditorial de informática de los sueños.docx
editorial de informática de los sueños.docx
 
avancestecnologicossigloveintiunoprofetengohambreayuda
avancestecnologicossigloveintiunoprofetengohambreayudaavancestecnologicossigloveintiunoprofetengohambreayuda
avancestecnologicossigloveintiunoprofetengohambreayuda
 
Electricidad Libro compendio de temas estudiados.docx
Electricidad Libro compendio de temas estudiados.docxElectricidad Libro compendio de temas estudiados.docx
Electricidad Libro compendio de temas estudiados.docx
 
Redes Neuronales profundas convolucionales CNN ́s-1.pdf
Redes Neuronales profundas convolucionales CNN ́s-1.pdfRedes Neuronales profundas convolucionales CNN ́s-1.pdf
Redes Neuronales profundas convolucionales CNN ́s-1.pdf
 
Chat GPT para la educación Latinoamerica
Chat GPT para la educación LatinoamericaChat GPT para la educación Latinoamerica
Chat GPT para la educación Latinoamerica
 
Introduccion-a-la-electronica-industrial.pptx
Introduccion-a-la-electronica-industrial.pptxIntroduccion-a-la-electronica-industrial.pptx
Introduccion-a-la-electronica-industrial.pptx
 
herramientas web para estudiantes interesados en el tema
herramientas web para estudiantes interesados en el temaherramientas web para estudiantes interesados en el tema
herramientas web para estudiantes interesados en el tema
 
BUSCADORES DE INTERNET (Universidad de Sonora).
BUSCADORES DE INTERNET (Universidad de Sonora).BUSCADORES DE INTERNET (Universidad de Sonora).
BUSCADORES DE INTERNET (Universidad de Sonora).
 
JORNADA INTELIGENCIA ARTIFICIAL Y REALIDAD VIRTUAL
JORNADA INTELIGENCIA ARTIFICIAL Y REALIDAD VIRTUALJORNADA INTELIGENCIA ARTIFICIAL Y REALIDAD VIRTUAL
JORNADA INTELIGENCIA ARTIFICIAL Y REALIDAD VIRTUAL
 
innovacion banking & warehouse 2024 blog
innovacion banking & warehouse 2024 bloginnovacion banking & warehouse 2024 blog
innovacion banking & warehouse 2024 blog
 
Tipos de Datos de Microsoft Access-JOEL GARCIA.pptx
Tipos de Datos de Microsoft Access-JOEL GARCIA.pptxTipos de Datos de Microsoft Access-JOEL GARCIA.pptx
Tipos de Datos de Microsoft Access-JOEL GARCIA.pptx
 
Navegadores de internet - Nuevas Tecnologías de la Información y la Comunicación
Navegadores de internet - Nuevas Tecnologías de la Información y la ComunicaciónNavegadores de internet - Nuevas Tecnologías de la Información y la Comunicación
Navegadores de internet - Nuevas Tecnologías de la Información y la Comunicación
 
Desarrollo del Dominio del Internet - Estrada
Desarrollo del Dominio del Internet - EstradaDesarrollo del Dominio del Internet - Estrada
Desarrollo del Dominio del Internet - Estrada
 
Uso de las TIC en la vida cotidiana .
Uso de las TIC en la vida cotidiana       .Uso de las TIC en la vida cotidiana       .
Uso de las TIC en la vida cotidiana .
 
Imágenes digitales: Calidad de la información
Imágenes digitales: Calidad de la informaciónImágenes digitales: Calidad de la información
Imágenes digitales: Calidad de la información
 
Ejercicio 1 periodo 2 de Tecnología 2024
Ejercicio 1 periodo 2 de Tecnología 2024Ejercicio 1 periodo 2 de Tecnología 2024
Ejercicio 1 periodo 2 de Tecnología 2024
 
Tipos de datos en Microsoft Access de Base de Datos
Tipos de datos en Microsoft Access de Base de DatosTipos de datos en Microsoft Access de Base de Datos
Tipos de datos en Microsoft Access de Base de Datos
 
el uso de las TIC en la vida cotidiana.pptx
el uso de las TIC en la vida cotidiana.pptxel uso de las TIC en la vida cotidiana.pptx
el uso de las TIC en la vida cotidiana.pptx
 
PRÁCTICA Nº 4: “Análisis de secuencias del ADN con el software BioEdit y uso ...
PRÁCTICA Nº 4: “Análisis de secuencias del ADN con el software BioEdit y uso ...PRÁCTICA Nº 4: “Análisis de secuencias del ADN con el software BioEdit y uso ...
PRÁCTICA Nº 4: “Análisis de secuencias del ADN con el software BioEdit y uso ...
 

Presentación Ruby on Rails en Softare Freedom Day 09 Buenos Aires

  • 1. Ruby on Rails Pedro Visintin
  • 2. Dale un pescado a un hombre... ...Y LO ALIMENTARÁS POR UN DÍA. Enseñale a pescar, y lo alimentarás por una vida.
  • 3. Desarrollo Web • HTML algo así como reportes • con JavaScript algo de código • con CSS otro lenguaje más para complicarle la vida al programador y al diseñador gráfico • deadlines asesinos y cambios constantes • Una hermosa RDBMS para persistencia
  • 4. Un framework Web • Orientado a Objetos • ORM (ó document oriented database?) • REST • Mailer • Rendering • Javascript Glue
  • 5. ex sodero (cajón de soda) Yukihiro Matsumoto creador de Ruby
  • 6. Jopo web 2.0 David Heinemeier Hansson. Creador de Rails
  • 7. Como nos sentimos programando? • DRY (do not repeat yourself) • Convention Over Configuration • Pensado en el programador, no el la máquina
  • 8. las aplicaciones no escalan montañas
  • 9. Rendering • ActionView • erb • haml • otros • view.mime-type.rendering-engine = index.html.haml
  • 10. erb rendering <h1>Product<%= @product.name %></h1> <ul> <% @product.comments.each do |comment| %> <li><%= comment.subject %></li> <% end %> </ul>
  • 13. REST • interfaz polimórfica • stateless • un recurso multiples representaciones
  • 14. Resources on Rails map.resources :products rake routes | grep product products GET /products(.:format) {:action=>"index", :controller=>"products"} POST /products(.:format) {:action=>"create", :controller=>"products"} new_product GET /products/new(.:format) {:action=>"new", :controller=>"products"} edit_product GET /products/:id/edit(.:format) {:action=>"edit", :controller=>"products"} product GET /products/:id(.:format) {:action=>"show", :controller=>"products"} PUT /products/:id(.:format) {:action=>"update", :controller=>"products"} DELETE /products/:id(.:format) {:action=>"destroy", :controller=>"products"}
  • 15. Resources on Rails map.resources :products, :has_many => [ :comments] rake routes|grep product products GET /products(.:format) {:action=>"index", :controller=>"products"} POST /products(.:format) {:action=>"create", :controller=>"products"} new_product GET /products/new(.:format) {:action=>"new", :controller=>"products"} edit_product GET /products/:id/edit(.:format) {:action=>"edit", :controller=>"products"} product GET /products/:id(.:format) {:action=>"show", :controller=>"products"} PUT /products/:id(.:format) {:action=>"update", :controller=>"products"} DELETE /products/:id(.:format) {:action=>"destroy", :controller=>"products"} product_comments GET /products/:product_id/comments(.:format) {:action=>"index", :controller=>"comments"} POST /products/:product_id/comments(.:format) {:action=>"create", :controller=>"comments"} new_product_comment GET /products/:product_id/comments/new(.:format) {:action=>"new", :controller=>"comments"} edit_product_comment GET /products/:product_id/comments/:id/edit(.:format){ :action=>"edit", :controller=>"comments"} product_comment GET /products/:product_id/comments/:id(.:format) {:action=>"show", :controller=>"comments"} PUT /products/:product_id/comments/:id(.:format) {:action=>"update", :controller=>"comments"} DELETE /products/:product_id/comments/:id(.:format) {:action=>"destroy", :controller=>"comments"}
  • 16. ActionController class ProductsController < ApplicationController def index end def new end def edit end def show end def create end def update end def destroy end end
  • 17. request cycle http://localhost:3000/products/123 class ProductsController < ApplicationController def show @product = Product.find(params[:id]) end RAILS_ROOT/apps/views/products/show.html.erb
  • 18. Tu vida es Orientada a Objetos?
  • 19. The Orm: ActiveRecord • persiste transparentemente a un RDBMS a través de adapters • se escribe muy poco SQL casi nada • provee macros para asociaciones • provee validaciones • provee callbacks en los instantes necesarios • (named scopes) provee asociar metodos a queries predefinidos y anidarlos indefinidamente • soporte de transacciones • soporte de observers • reflections en asociaciones y agregaciones
  • 20. complementos y otros • Manejo automático de entornos • Generators • Consola • Log • Rake • Migrations • Testing
  • 21. Una Clase ActiveRecord Class Product < ActiveRecord::Base end
  • 22. El soporte en la BD class CreateProducts < ActiveRecord::Migration def self.up create_table :products do |t| t.string :name, :limit => 100 t.timestamps end end def self.down drop_table :products end end
  • 23. Una Clase ActiveRecord Class Product < ActiveRecord::Base has_many :comments validates_presence_of :name validates_uniqueness_of :name before_save :generate_code end
  • 24. Migrations • es donde se definen las tablas para persistencia • versionado del diseño de tablas del RDBMS • permite ir hacia adelante o hacia atrás • nos desliga del SQL
  • 25. Qué es Rake? • es un make hecho en ruby para ruby • rails usa rake para automatizar tareas • crear bases de datos • actualizar scripts • migraciones • etc • rake tiene dependencias de tareas a ejecutar
  • 26. Metodologías? • BDD • TDD • HLQSMC (hago lo que se me canta) • FDD (faso driven development) • Otras
  • 27. BDD con Rspec describe Project do describe “creating” do it “should validate uniqueness of name” do Project.create!(:name=>‘proj’) Project.new(:name=>‘proj’).should_not be_valid end end end
  • 28. Entornos de Desarrollo • Emacs • Vi • Textmate (mac os) • Notepad++ • Netbeans (para los que le gustan las IDE)
  • 31. Referencias • http://guides.rubyonrails.org/ • http://www.javapassion.com/rubyonrails/ #Ruby_On_Rails_Basics • http://www.rubyonrails.org/ • http://lista.rubyargentina.com.ar/ • http://blogs.onrails.com.ar