SlideShare uma empresa 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

Mais conteúdo relacionado

Semelhante a Ruby on Rails guía introductoria

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
 
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
 
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
 
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
 

Semelhante a Ruby on Rails guía introductoria (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
 
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
 
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
 
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

La Electricidad Y La Electrónica Trabajo Tecnología.pdf
La Electricidad Y La Electrónica Trabajo Tecnología.pdfLa Electricidad Y La Electrónica Trabajo Tecnología.pdf
La Electricidad Y La Electrónica Trabajo Tecnología.pdfjeondanny1997
 
Trabajando con Formasy Smart art en power Point
Trabajando con Formasy Smart art en power PointTrabajando con Formasy Smart art en power Point
Trabajando con Formasy Smart art en power PointValerioIvanDePazLoja
 
Viguetas Pretensadas en concreto armado
Viguetas Pretensadas  en concreto armadoViguetas Pretensadas  en concreto armado
Viguetas Pretensadas en concreto armadob7fwtwtfxf
 
certificado de oracle academy cetrificado.pdf
certificado de oracle academy cetrificado.pdfcertificado de oracle academy cetrificado.pdf
certificado de oracle academy cetrificado.pdfFernandoOblitasVivan
 
Trabajo de tecnología excel avanzado.pdf
Trabajo de tecnología excel avanzado.pdfTrabajo de tecnología excel avanzado.pdf
Trabajo de tecnología excel avanzado.pdfedepmariaperez
 
Inteligencia Artificial. Matheo Hernandez Serrano USCO 2024
Inteligencia Artificial. Matheo Hernandez Serrano USCO 2024Inteligencia Artificial. Matheo Hernandez Serrano USCO 2024
Inteligencia Artificial. Matheo Hernandez Serrano USCO 2024u20211198540
 
Actividades de computación para alumnos de preescolar
Actividades de computación para alumnos de preescolarActividades de computación para alumnos de preescolar
Actividades de computación para alumnos de preescolar24roberto21
 
_Planificacion Anual NTICX 2024.SEC.21.4.1.docx.pdf
_Planificacion Anual NTICX 2024.SEC.21.4.1.docx.pdf_Planificacion Anual NTICX 2024.SEC.21.4.1.docx.pdf
_Planificacion Anual NTICX 2024.SEC.21.4.1.docx.pdfBetianaJuarez1
 
PLANEACION DE CLASES TEMA TIPOS DE FAMILIA.docx
PLANEACION DE CLASES TEMA TIPOS DE FAMILIA.docxPLANEACION DE CLASES TEMA TIPOS DE FAMILIA.docx
PLANEACION DE CLASES TEMA TIPOS DE FAMILIA.docxhasbleidit
 
CommitConf 2024 - Spring Boot <3 Testcontainers
CommitConf 2024 - Spring Boot <3 TestcontainersCommitConf 2024 - Spring Boot <3 Testcontainers
CommitConf 2024 - Spring Boot <3 TestcontainersIván López Martín
 
Herramientas que posibilitan la información y la investigación.pdf
Herramientas que posibilitan la información y la investigación.pdfHerramientas que posibilitan la información y la investigación.pdf
Herramientas que posibilitan la información y la investigación.pdfKarinaCambero3
 
Slideshare y Scribd - Noli Cubillan Gerencia
Slideshare y Scribd - Noli Cubillan GerenciaSlideshare y Scribd - Noli Cubillan Gerencia
Slideshare y Scribd - Noli Cubillan Gerenciacubillannoly
 
Análisis de los artefactos (nintendo NES)
Análisis de los artefactos (nintendo NES)Análisis de los artefactos (nintendo NES)
Análisis de los artefactos (nintendo NES)JuanStevenTrujilloCh
 
Guía de Registro slideshare paso a paso 1
Guía de Registro slideshare paso a paso 1Guía de Registro slideshare paso a paso 1
Guía de Registro slideshare paso a paso 1ivanapaterninar
 
PROYECCIÓN DE VISTAS planos de vistas y mas
PROYECCIÓN DE VISTAS planos de vistas y masPROYECCIÓN DE VISTAS planos de vistas y mas
PROYECCIÓN DE VISTAS planos de vistas y maslida630411
 
Clasificación de Conjuntos de Datos Desequilibrados.pptx
Clasificación de Conjuntos de Datos Desequilibrados.pptxClasificación de Conjuntos de Datos Desequilibrados.pptx
Clasificación de Conjuntos de Datos Desequilibrados.pptxCarolina Bujaico
 
Documentacion Electrónica en Actos Juridicos
Documentacion Electrónica en Actos JuridicosDocumentacion Electrónica en Actos Juridicos
Documentacion Electrónica en Actos JuridicosAlbanyMartinez7
 
TALLER DE ANALISIS SOLUCION PART 2 (1)-1.docx
TALLER DE ANALISIS SOLUCION  PART 2 (1)-1.docxTALLER DE ANALISIS SOLUCION  PART 2 (1)-1.docx
TALLER DE ANALISIS SOLUCION PART 2 (1)-1.docxobandopaula444
 
Modelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptx
Modelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptxModelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptx
Modelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptxtjcesar1
 

Último (20)

La Electricidad Y La Electrónica Trabajo Tecnología.pdf
La Electricidad Y La Electrónica Trabajo Tecnología.pdfLa Electricidad Y La Electrónica Trabajo Tecnología.pdf
La Electricidad Y La Electrónica Trabajo Tecnología.pdf
 
Trabajando con Formasy Smart art en power Point
Trabajando con Formasy Smart art en power PointTrabajando con Formasy Smart art en power Point
Trabajando con Formasy Smart art en power Point
 
Viguetas Pretensadas en concreto armado
Viguetas Pretensadas  en concreto armadoViguetas Pretensadas  en concreto armado
Viguetas Pretensadas en concreto armado
 
certificado de oracle academy cetrificado.pdf
certificado de oracle academy cetrificado.pdfcertificado de oracle academy cetrificado.pdf
certificado de oracle academy cetrificado.pdf
 
Trabajo de tecnología excel avanzado.pdf
Trabajo de tecnología excel avanzado.pdfTrabajo de tecnología excel avanzado.pdf
Trabajo de tecnología excel avanzado.pdf
 
Inteligencia Artificial. Matheo Hernandez Serrano USCO 2024
Inteligencia Artificial. Matheo Hernandez Serrano USCO 2024Inteligencia Artificial. Matheo Hernandez Serrano USCO 2024
Inteligencia Artificial. Matheo Hernandez Serrano USCO 2024
 
Actividades de computación para alumnos de preescolar
Actividades de computación para alumnos de preescolarActividades de computación para alumnos de preescolar
Actividades de computación para alumnos de preescolar
 
_Planificacion Anual NTICX 2024.SEC.21.4.1.docx.pdf
_Planificacion Anual NTICX 2024.SEC.21.4.1.docx.pdf_Planificacion Anual NTICX 2024.SEC.21.4.1.docx.pdf
_Planificacion Anual NTICX 2024.SEC.21.4.1.docx.pdf
 
PLANEACION DE CLASES TEMA TIPOS DE FAMILIA.docx
PLANEACION DE CLASES TEMA TIPOS DE FAMILIA.docxPLANEACION DE CLASES TEMA TIPOS DE FAMILIA.docx
PLANEACION DE CLASES TEMA TIPOS DE FAMILIA.docx
 
El camino a convertirse en Microsoft MVP
El camino a convertirse en Microsoft MVPEl camino a convertirse en Microsoft MVP
El camino a convertirse en Microsoft MVP
 
CommitConf 2024 - Spring Boot <3 Testcontainers
CommitConf 2024 - Spring Boot <3 TestcontainersCommitConf 2024 - Spring Boot <3 Testcontainers
CommitConf 2024 - Spring Boot <3 Testcontainers
 
Herramientas que posibilitan la información y la investigación.pdf
Herramientas que posibilitan la información y la investigación.pdfHerramientas que posibilitan la información y la investigación.pdf
Herramientas que posibilitan la información y la investigación.pdf
 
Slideshare y Scribd - Noli Cubillan Gerencia
Slideshare y Scribd - Noli Cubillan GerenciaSlideshare y Scribd - Noli Cubillan Gerencia
Slideshare y Scribd - Noli Cubillan Gerencia
 
Análisis de los artefactos (nintendo NES)
Análisis de los artefactos (nintendo NES)Análisis de los artefactos (nintendo NES)
Análisis de los artefactos (nintendo NES)
 
Guía de Registro slideshare paso a paso 1
Guía de Registro slideshare paso a paso 1Guía de Registro slideshare paso a paso 1
Guía de Registro slideshare paso a paso 1
 
PROYECCIÓN DE VISTAS planos de vistas y mas
PROYECCIÓN DE VISTAS planos de vistas y masPROYECCIÓN DE VISTAS planos de vistas y mas
PROYECCIÓN DE VISTAS planos de vistas y mas
 
Clasificación de Conjuntos de Datos Desequilibrados.pptx
Clasificación de Conjuntos de Datos Desequilibrados.pptxClasificación de Conjuntos de Datos Desequilibrados.pptx
Clasificación de Conjuntos de Datos Desequilibrados.pptx
 
Documentacion Electrónica en Actos Juridicos
Documentacion Electrónica en Actos JuridicosDocumentacion Electrónica en Actos Juridicos
Documentacion Electrónica en Actos Juridicos
 
TALLER DE ANALISIS SOLUCION PART 2 (1)-1.docx
TALLER DE ANALISIS SOLUCION  PART 2 (1)-1.docxTALLER DE ANALISIS SOLUCION  PART 2 (1)-1.docx
TALLER DE ANALISIS SOLUCION PART 2 (1)-1.docx
 
Modelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptx
Modelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptxModelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptx
Modelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptx
 

Ruby on Rails guía introductoria

  • 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