SlideShare une entreprise Scribd logo
1  sur  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

Contenu connexe

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

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

Dernier

PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptxPROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptxAlan779941
 
Modulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdfModulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdfAnnimoUno1
 
Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21mariacbr99
 
Avances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estosAvances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estossgonzalezp1
 
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptxEVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptxJorgeParada26
 
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...JohnRamos830530
 
pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITMaricarmen Sánchez Ruiz
 
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptxEL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptxMiguelAtencio10
 
How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.FlorenciaCattelani
 
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdfRefrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdfvladimiroflores1
 
Avances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanaAvances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanamcerpam
 

Dernier (11)

PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptxPROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
 
Modulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdfModulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdf
 
Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21
 
Avances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estosAvances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estos
 
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptxEVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
 
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
 
pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNIT
 
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptxEL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
 
How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.
 
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdfRefrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
 
Avances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanaAvances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvana
 

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