SlideShare une entreprise Scribd logo
1  sur  63
Javier Cuevas - Diacode.com
Ruby   Rails
Ruby                    Rails
• Lenguaje de programación
  interpretado.
Ruby                    Rails
• Lenguaje de programación
  interpretado.

• Todo son objetos
Ruby                    Rails
• Lenguaje de programación
  interpretado.

• Todo son objetos
• Tipado dinámico
Ruby                      Rails
• Lenguaje de programación
   interpretado.

• Todo son objetos
• Tipado dinámico
• Sintaxis limpia e intuitiva
Ruby                      Rails
• Lenguaje de programación
   interpretado.

• Todo son objetos
• Tipado dinámico
• Sintaxis limpia e intuitiva
• RubyGems: gestor de
   paquetes (gemas)
Ruby                      Rails
• Lenguaje de programación
   interpretado.

• Todo son objetos
• Tipado dinámico
• Sintaxis limpia e intuitiva
• RubyGems: gestor de
   paquetes (gemas)

• “to enjoy programming,
   and to be happy”
Ruby                            Rails
• Lenguaje de programación
   interpretado.
                                • Framework MVC para
                                  Ruby

• Todo son objetos
• Tipado dinámico
• Sintaxis limpia e intuitiva
• RubyGems: gestor de
   paquetes (gemas)

• “to enjoy programming,
   and to be happy”
Ruby                            Rails
• Lenguaje de programación
   interpretado.
                                • Framework MVC para
                                  Ruby

• Todo son objetos              • Incluye ORM (mapeador
                                  modelos - tablas)
• Tipado dinámico
• Sintaxis limpia e intuitiva
• RubyGems: gestor de
   paquetes (gemas)

• “to enjoy programming,
   and to be happy”
Ruby                            Rails
• Lenguaje de programación
   interpretado.
                                • Framework MVC para
                                  Ruby

• Todo son objetos              • Incluye ORM (mapeador
                                  modelos - tablas)
• Tipado dinámico
                                • Open Source. Creado en
• Sintaxis limpia e intuitiva     2004.

• RubyGems: gestor de
   paquetes (gemas)

• “to enjoy programming,
   and to be happy”
Ruby                             Rails
• Lenguaje de programación
   interpretado.
                                • Framework MVC para
                                  Ruby

• Todo son objetos              • Incluye ORM (mapeador
                                  modelos - tablas)
• Tipado dinámico
                                • Open Source. Creado en
• Sintaxis limpia e intuitiva     2004.

• RubyGems: gestor de           • “Convention over
   paquetes (gemas)               configuration”

• “to enjoy programming,
   and to be happy”
Ruby                             Rails
• Lenguaje de programación
   interpretado.
                                • Framework MVC para
                                   Ruby

• Todo son objetos              • Incluye ORM (mapeador
                                   modelos - tablas)
• Tipado dinámico
                                • Open Source. Creado en
• Sintaxis limpia e intuitiva      2004.

• RubyGems: gestor de           • “Convention over
   paquetes (gemas)                configuration”

• “to enjoy programming,        • “Dont Repeat Yourself”
   and to be happy”
Algunas cosas
   raras de
     Ruby
No hay corchetes { } ni en
   ifs ni en métodos
   def make_positive(number)
     if number < 0
       -number
     else
       number
                       Return implícito
     end
   end
if y unless al final de línea

   puts 'es par' if number.even?

   puts 'es par' unless number.odd?
Llamadas a métodos
        sin paréntesis
results = method_name param1, param2
results = method_name(param1, param2)



results = method_name(param1, param2).another_method
Símbolos
Símbolos
•   :my_symbol
Símbolos
•   :my_symbol

•   NO son variables. NO son constantes.
Símbolos
•   :my_symbol

•   NO son variables. NO son constantes.

•   Podemos verlos como etiquetas.
Símbolos
•   :my_symbol

•   NO son variables. NO son constantes.

•   Podemos verlos como etiquetas.

•   Fundamentalmente los usamos como índices en arrays
    asociativos (Hashes).
Símbolos
•   :my_symbol

•   NO son variables. NO son constantes.

•   Podemos verlos como etiquetas.

•   Fundamentalmente los usamos como índices en arrays
    asociativos (Hashes).

•   A pesar de todo: también son objetos.
Símbolos
•   :my_symbol

•   NO son variables. NO son constantes.

•   Podemos verlos como etiquetas.

•   Fundamentalmente los usamos como índices en arrays
    asociativos (Hashes).

•   A pesar de todo: también son objetos.

    def silly_method(options)
      puts "Color: " + options[:color]
      puts "City: " + options[:city]
    end

    silly_method :color => "red", :city => "Madrid"
Blocks
• Un Block es un “trozo de código”
• Podemos pasarlos como parámetro a un método
      some_numbers = [1,2,3,4,5]

      some_numbers.each { |number| puts number }
      # es equivalente a ...
      some_numbers.each do |number|
        puts number
      end
Model
View
Controller
View


 Web
         Controller
Server


           Model
View


 Web
         Controller
Server


           Model
View


 Web
         Controller
Server


           Model
View


 Web
         Controller
Server


           Model
View


 Web
         Controller
Server


           Model
View


 Web
         Controller
Server


           Model
View


 Web
         Controller
Server


           Model
View


 Web
         Controller
Server


           Model
View


 Web
         Controller
Server


           Model
View


 Web
         Controller
Server


           Model
MVC en Rails
                     View        Helpers




 Web
Server   Routes   Controller




                    Model



                  ActiveRecord
MVC en Rails
                                View        Helpers




     Web
    Server        Routes     Controller



Buena práctica:
Mantén los Controladores       Model
con el menor número de
lineas de código.
Mueve toda la lógica de tu
aplicación al Modelo.        ActiveRecord
Model
No es
necesario      class Post < ActiveRecord::Base
especificar       # Relationships
                 has_many :comments
los
atributos        # Validations
del objeto       validates :title, :presence => true
                 validates :content, :presence => true
en la clase.
                 # Class methods
Rails            def self.all_posts_by_diacode
                   # ...
buscará
                 end
directamen
te en la         # Instance methods
BBDD             def is_recent?
                   # ...
                 end

               end
Controller
class PostsController < ApplicationController

  def index
    @posts = Post.all

    respond_to do |format|
      format.html
      format.js { render json: @posts }
    end
  end

  # More actions...
end
Controller
class PostsController < ApplicationController
                              Respuesta para
  def index                   peticiones html. Al no
    @posts = Post.all         especificar nada
                              renderizará
    respond_to do |format|    automaticamente la
                              vista index.html.erb
      format.html
      format.js { render json: @posts }
    end
  end

  # More actions...
end
View
           Layout                                                        View

<html>
  <head>                                                <% content_for :header do %>
    <title>Awesome Rails App</title>                      <h1>Post List</h1>
  </head>                                               <% end %>
  <body>
    <div id="header">                                   <p>This is the content!</p>
       <%= yield :header %>                             <ul>
    <div>                                                 <% @posts.each do |post| %>
    <div id="content">                                       <li><%= @post.title %></li>
       <%= yield %>                                       <% end %>
    </div>                                              </ul>
  </body>
</html>


                                         Ruby ERB
                           <% Ruby code -- inline with output %>
                        <%= Ruby expression -- replace with result %>
                        <%# comment -- ignored -- useful in testing %>
Un par de
 acrónimos
importantes
  en Rails
CRUD
• Las 4 operaciones básicas que se realizan
  sobre un objeto
  • Create (insertar objeto en BBDD)
  • Read (leer objeto de BBDD)
  • Update (actualizar objeto en BBDD)
  • Delete (borrar objeto de la BBDD)
REST
• Representative State Transfer
• Objetos como recursos en la web
• HTTP soporta GET, POST, PUT y DELETE



                        http://bit.ly/enBQtL
REST
• Representative State Transfer
• Objetos como recursos en la web
• HTTP soporta GET, POST, PUT y DELETE
  Read
    -
Create
  Read
  Read
Update
 Delete

                        http://bit.ly/enBQtL
Relaciones
entre Modelos
   http://bit.ly/15HtEh
1a1
1a1
con modelo intermedio

               1 supplier tiene 1 account

               1 supplier tiene 1 account_history
               a través su account

               1 account pertenece a 1 supplier

               1 account_history pertenece a 1
               supplier
1aN
NaN
      3 tablas en
      la BBDD,
      pero solo 2
      modelos en
      Rails!
NaN
con modelo intermedio
                 3 tablas en
                 la BBDD y
                 3 modelos
Migraciones
Crear y modificar la BBDD
Migraciones
• En Rails todas las modificaciones de la estructura de
   la BBDD deben hacerse a traves de migraciones.

• Las migraciones son archivos Ruby almacenados en
   [app]/db/migrate
• El nombre de archivo de cada migración lleva un
   timestamp que indica en que orden se ejecutarán.

• Permiten crear tablas, modificar columnas, crear
   índices, etc.

• Facilitan la colaboración entre programadores.
Migraciones
class CreatePost < ActiveRecord::Migration
  def change
    create_table :posts do |t|
      t.string :title
      t.text :content         Por convención
    end
  end
                              el nombre de las
end                           tablas es
                            siempre en
                            plural
Migraciones
class CreatePost < ActiveRecord::Migration
  def change
    create_table :posts do |t|
      t.string :title
      t.text :content         Por convención
    end
  end
                              el nombre de las
end                           tablas es
                            siempre en
                            plural
Migraciones

• Crear generate migration CreatePosts
  rails
        migración

                          Rake permite ejecutar
• Ejecutar migración
  rake db:migrate
                          tareas.
                          Hay algunas ya definidas
                          como db:migrate, pero
                          podemos crear tareas rake
                          propias
• Deshacer cambios de la última migración
  rake db:rollback
Crear una app con
   Scaffolding
De 0 a 100 en 1 minuto
Creando una app
• Creamos laapp_name
  rails new
             aplicación
   cd app_name
   rm public/index.html

• * en Linux (Diacode Box) añadimos al Gemfile
  gem 'therubyracer'
                                      Es un intérprete de
   y ejecutamos en el terminal        Javascript para Ruby.
   bundle install                     Es necesario para
                                      compilar los archivos
• Arrancamos el servidor
  rails s
                                      en CoffeeScript.



• El servidor corre en http://localhost:3000
Haciendo Scaffold
• Scaffold nos permite generar automáticamente
  Modelo, Controlador, Migraciones, etc. para un
  Modelo.
  rails generate scaffold Post title:string content:text



• Ejecutamos las migraciones generadas
  rake db:migrate



• En http://localhost:3000/posts tendremos un
  CRUD completamente funcional
Consejos
prácticos
(¡y ya terminamos!)
Consejos Prácticos
• Consola de Ruby
  Ideal para probar cosas cuando desconocemos el
  lenguaje.
  irb



• Consola de Rails
  Perfecta para probar métodos recién
  implementados y explorar la base de datos.
  cd [myapp]
  rails c
Eso es todo por hoy.
Ahora, os toca a vosotros.

Contenu connexe

Tendances

jQuery - 01 Conceptos básicos de java script
jQuery - 01 Conceptos básicos de java scriptjQuery - 01 Conceptos básicos de java script
jQuery - 01 Conceptos básicos de java script
Jacob Flores
 

Tendances (17)

Hola RoR
Hola RoRHola RoR
Hola RoR
 
Por qué Symfony2 es tan rápido
Por qué Symfony2 es tan rápidoPor qué Symfony2 es tan rápido
Por qué Symfony2 es tan rápido
 
Workshop 7: Single Page Applications
Workshop 7: Single Page ApplicationsWorkshop 7: Single Page Applications
Workshop 7: Single Page Applications
 
Creación de plugins con Grails
Creación de plugins con GrailsCreación de plugins con Grails
Creación de plugins con Grails
 
Ruby on rails
Ruby on railsRuby on rails
Ruby on rails
 
Java script
Java scriptJava script
Java script
 
Programación Reactiva, Javascript Isomorfo y Meteorjs !
Programación Reactiva, Javascript Isomorfo y Meteorjs !Programación Reactiva, Javascript Isomorfo y Meteorjs !
Programación Reactiva, Javascript Isomorfo y Meteorjs !
 
Introducción a Angular
Introducción a AngularIntroducción a Angular
Introducción a Angular
 
Curso TDD Ruby on Rails #02: Test Driven Development
Curso TDD  Ruby on Rails #02: Test Driven DevelopmentCurso TDD  Ruby on Rails #02: Test Driven Development
Curso TDD Ruby on Rails #02: Test Driven Development
 
Gwt III - Avanzado
Gwt III - AvanzadoGwt III - Avanzado
Gwt III - Avanzado
 
React
ReactReact
React
 
Integrando React.js en aplicaciones Symfony (deSymfony 2016)
Integrando React.js en aplicaciones Symfony (deSymfony 2016)Integrando React.js en aplicaciones Symfony (deSymfony 2016)
Integrando React.js en aplicaciones Symfony (deSymfony 2016)
 
Creación de Builders y DSL's con Groovy
Creación de Builders y DSL's con GroovyCreación de Builders y DSL's con Groovy
Creación de Builders y DSL's con Groovy
 
jQuery - 01 Conceptos básicos de java script
jQuery - 01 Conceptos básicos de java scriptjQuery - 01 Conceptos básicos de java script
jQuery - 01 Conceptos básicos de java script
 
Symfony 2 CMF
Symfony 2 CMFSymfony 2 CMF
Symfony 2 CMF
 
[ES] Introdución al desarrollo de aplicaciones web en java
[ES] Introdución al desarrollo de aplicaciones  web en java[ES] Introdución al desarrollo de aplicaciones  web en java
[ES] Introdución al desarrollo de aplicaciones web en java
 
Componentes en angularjs 1.5
Componentes en angularjs 1.5Componentes en angularjs 1.5
Componentes en angularjs 1.5
 

Similaire à Taller de Introducción a Ruby on Rails

Presentación Ruby on Rails
Presentación Ruby on RailsPresentación Ruby on Rails
Presentación Ruby on Rails
Giannis Morales
 
SAP Inside Track Lima 09 - Ruby y SAP
SAP Inside Track Lima 09 - Ruby y SAPSAP Inside Track Lima 09 - Ruby y SAP
SAP Inside Track Lima 09 - Ruby y SAP
Alvaro Tejada
 
Integración de Arel en ActiveRecord
Integración de Arel en ActiveRecordIntegración de Arel en ActiveRecord
Integración de Arel en ActiveRecord
miloops
 
Taller Redis
Taller RedisTaller Redis
Taller Redis
betabeers
 

Similaire à Taller de Introducción a Ruby on Rails (20)

Ruby on Rails - ETyC 2011
Ruby on Rails - ETyC 2011Ruby on Rails - ETyC 2011
Ruby on Rails - ETyC 2011
 
Presentación Ruby on Rails
Presentación Ruby on RailsPresentación Ruby on Rails
Presentación Ruby on Rails
 
Groopify para groopies
Groopify para groopiesGroopify para groopies
Groopify para groopies
 
Ruby on Rails & TDD con RSpec
Ruby on Rails & TDD con RSpecRuby on Rails & TDD con RSpec
Ruby on Rails & TDD con RSpec
 
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
 
Sesión 03: Ruby y SAP
Sesión 03: Ruby y SAPSesión 03: Ruby y SAP
Sesión 03: Ruby y SAP
 
SAP Inside Track Lima 09 - Ruby y SAP
SAP Inside Track Lima 09 - Ruby y SAPSAP Inside Track Lima 09 - Ruby y SAP
SAP Inside Track Lima 09 - Ruby y SAP
 
Curso php-my sql-clase-2
Curso php-my sql-clase-2Curso php-my sql-clase-2
Curso php-my sql-clase-2
 
Meetup training Taller RoR
Meetup training Taller RoR Meetup training Taller RoR
Meetup training Taller RoR
 
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
 
Ruby on Rails
Ruby on RailsRuby on Rails
Ruby on Rails
 
Introducción a RubyOnRails
Introducción a RubyOnRailsIntroducción a RubyOnRails
Introducción a RubyOnRails
 
Integración de Arel en ActiveRecord
Integración de Arel en ActiveRecordIntegración de Arel en ActiveRecord
Integración de Arel en ActiveRecord
 
Ruby on rails Introducción
Ruby on rails Introducción Ruby on rails Introducción
Ruby on rails Introducción
 
5 tips para programar en Ruby On Rails
5 tips para programar en Ruby On Rails 5 tips para programar en Ruby On Rails
5 tips para programar en Ruby On Rails
 
Jruby On Rails. Ruby on Rails en la JVM
Jruby On Rails. Ruby on Rails en la JVMJruby On Rails. Ruby on Rails en la JVM
Jruby On Rails. Ruby on Rails en la JVM
 
Aplicaciones en HTML 5: Los pilares de una Nueva Web
Aplicaciones en HTML 5: Los pilares de una Nueva WebAplicaciones en HTML 5: Los pilares de una Nueva Web
Aplicaciones en HTML 5: Los pilares de una Nueva Web
 
Ruby on the Rails
Ruby on the RailsRuby on the Rails
Ruby on the Rails
 
Presentacion Ruby on Rails CTIC-Cusco2007
Presentacion Ruby on Rails CTIC-Cusco2007Presentacion Ruby on Rails CTIC-Cusco2007
Presentacion Ruby on Rails CTIC-Cusco2007
 
Taller Redis
Taller RedisTaller Redis
Taller Redis
 

Plus de Diacode

Presentación de Kogi
Presentación de KogiPresentación de Kogi
Presentación de Kogi
Diacode
 

Plus de Diacode (11)

CI/CD with Kubernetes, Helm & Wercker (#madScalability)
CI/CD with Kubernetes, Helm & Wercker (#madScalability)CI/CD with Kubernetes, Helm & Wercker (#madScalability)
CI/CD with Kubernetes, Helm & Wercker (#madScalability)
 
Phoenix for Rails Devs
Phoenix for Rails DevsPhoenix for Rails Devs
Phoenix for Rails Devs
 
Introduction to Elixir
Introduction to ElixirIntroduction to Elixir
Introduction to Elixir
 
Startup nomads
Startup nomadsStartup nomads
Startup nomads
 
Hacking your bank with Ruby and reverse engineering (Madrid.rb)
Hacking your bank with Ruby and reverse engineering (Madrid.rb)Hacking your bank with Ruby and reverse engineering (Madrid.rb)
Hacking your bank with Ruby and reverse engineering (Madrid.rb)
 
TLKR.io @ Betabeers Madrid
TLKR.io @ Betabeers MadridTLKR.io @ Betabeers Madrid
TLKR.io @ Betabeers Madrid
 
Métricas para hacer crecer tu proyecto
Métricas para hacer crecer tu proyectoMétricas para hacer crecer tu proyecto
Métricas para hacer crecer tu proyecto
 
Métricas para hacer crecer tu proyecto
Métricas para hacer crecer tu proyectoMétricas para hacer crecer tu proyecto
Métricas para hacer crecer tu proyecto
 
Presentación de Kogi
Presentación de KogiPresentación de Kogi
Presentación de Kogi
 
Educación: The Next Big Thing
Educación: The Next Big ThingEducación: The Next Big Thing
Educación: The Next Big Thing
 
Front-End Frameworks: a quick overview
Front-End Frameworks: a quick overviewFront-End Frameworks: a quick overview
Front-End Frameworks: a quick overview
 

Dernier

EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial Uninove
FagnerLisboa3
 
Modulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdfModulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdf
AnnimoUno1
 

Dernier (15)

Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnología
 
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
 
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
 
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
 
Presentación de elementos de afilado con esmeril
Presentación de elementos de afilado con esmerilPresentación de elementos de afilado con esmeril
Presentación de elementos de afilado con esmeril
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial Uninove
 
Desarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdfDesarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdf
 
Presentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxPresentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptx
 
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
 
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
 
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
 
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
 
presentacion de PowerPoint de la fuente de poder.pptx
presentacion de PowerPoint de la fuente de poder.pptxpresentacion de PowerPoint de la fuente de poder.pptx
presentacion de PowerPoint de la fuente de poder.pptx
 
guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Joseph
 

Taller de Introducción a Ruby on Rails

  • 1. Javier Cuevas - Diacode.com
  • 2. Ruby Rails
  • 3. Ruby Rails • Lenguaje de programación interpretado.
  • 4. Ruby Rails • Lenguaje de programación interpretado. • Todo son objetos
  • 5. Ruby Rails • Lenguaje de programación interpretado. • Todo son objetos • Tipado dinámico
  • 6. Ruby Rails • Lenguaje de programación interpretado. • Todo son objetos • Tipado dinámico • Sintaxis limpia e intuitiva
  • 7. Ruby Rails • Lenguaje de programación interpretado. • Todo son objetos • Tipado dinámico • Sintaxis limpia e intuitiva • RubyGems: gestor de paquetes (gemas)
  • 8. Ruby Rails • Lenguaje de programación interpretado. • Todo son objetos • Tipado dinámico • Sintaxis limpia e intuitiva • RubyGems: gestor de paquetes (gemas) • “to enjoy programming, and to be happy”
  • 9. Ruby Rails • Lenguaje de programación interpretado. • Framework MVC para Ruby • Todo son objetos • Tipado dinámico • Sintaxis limpia e intuitiva • RubyGems: gestor de paquetes (gemas) • “to enjoy programming, and to be happy”
  • 10. Ruby Rails • Lenguaje de programación interpretado. • Framework MVC para Ruby • Todo son objetos • Incluye ORM (mapeador modelos - tablas) • Tipado dinámico • Sintaxis limpia e intuitiva • RubyGems: gestor de paquetes (gemas) • “to enjoy programming, and to be happy”
  • 11. Ruby Rails • Lenguaje de programación interpretado. • Framework MVC para Ruby • Todo son objetos • Incluye ORM (mapeador modelos - tablas) • Tipado dinámico • Open Source. Creado en • Sintaxis limpia e intuitiva 2004. • RubyGems: gestor de paquetes (gemas) • “to enjoy programming, and to be happy”
  • 12. Ruby Rails • Lenguaje de programación interpretado. • Framework MVC para Ruby • Todo son objetos • Incluye ORM (mapeador modelos - tablas) • Tipado dinámico • Open Source. Creado en • Sintaxis limpia e intuitiva 2004. • RubyGems: gestor de • “Convention over paquetes (gemas) configuration” • “to enjoy programming, and to be happy”
  • 13. Ruby Rails • Lenguaje de programación interpretado. • Framework MVC para Ruby • Todo son objetos • Incluye ORM (mapeador modelos - tablas) • Tipado dinámico • Open Source. Creado en • Sintaxis limpia e intuitiva 2004. • RubyGems: gestor de • “Convention over paquetes (gemas) configuration” • “to enjoy programming, • “Dont Repeat Yourself” and to be happy”
  • 14. Algunas cosas raras de Ruby
  • 15. No hay corchetes { } ni en ifs ni en métodos def make_positive(number) if number < 0 -number else number Return implícito end end
  • 16. if y unless al final de línea puts 'es par' if number.even? puts 'es par' unless number.odd?
  • 17. Llamadas a métodos sin paréntesis results = method_name param1, param2 results = method_name(param1, param2) results = method_name(param1, param2).another_method
  • 19. Símbolos • :my_symbol
  • 20. Símbolos • :my_symbol • NO son variables. NO son constantes.
  • 21. Símbolos • :my_symbol • NO son variables. NO son constantes. • Podemos verlos como etiquetas.
  • 22. Símbolos • :my_symbol • NO son variables. NO son constantes. • Podemos verlos como etiquetas. • Fundamentalmente los usamos como índices en arrays asociativos (Hashes).
  • 23. Símbolos • :my_symbol • NO son variables. NO son constantes. • Podemos verlos como etiquetas. • Fundamentalmente los usamos como índices en arrays asociativos (Hashes). • A pesar de todo: también son objetos.
  • 24. Símbolos • :my_symbol • NO son variables. NO son constantes. • Podemos verlos como etiquetas. • Fundamentalmente los usamos como índices en arrays asociativos (Hashes). • A pesar de todo: también son objetos. def silly_method(options) puts "Color: " + options[:color] puts "City: " + options[:city] end silly_method :color => "red", :city => "Madrid"
  • 25. Blocks • Un Block es un “trozo de código” • Podemos pasarlos como parámetro a un método some_numbers = [1,2,3,4,5] some_numbers.each { |number| puts number } # es equivalente a ... some_numbers.each do |number| puts number end
  • 27. View Web Controller Server Model
  • 28. View Web Controller Server Model
  • 29. View Web Controller Server Model
  • 30. View Web Controller Server Model
  • 31. View Web Controller Server Model
  • 32. View Web Controller Server Model
  • 33. View Web Controller Server Model
  • 34. View Web Controller Server Model
  • 35. View Web Controller Server Model
  • 36. View Web Controller Server Model
  • 37. MVC en Rails View Helpers Web Server Routes Controller Model ActiveRecord
  • 38. MVC en Rails View Helpers Web Server Routes Controller Buena práctica: Mantén los Controladores Model con el menor número de lineas de código. Mueve toda la lógica de tu aplicación al Modelo. ActiveRecord
  • 39. Model No es necesario class Post < ActiveRecord::Base especificar # Relationships has_many :comments los atributos # Validations del objeto validates :title, :presence => true validates :content, :presence => true en la clase. # Class methods Rails def self.all_posts_by_diacode # ... buscará end directamen te en la # Instance methods BBDD def is_recent? # ... end end
  • 40. Controller class PostsController < ApplicationController def index @posts = Post.all respond_to do |format| format.html format.js { render json: @posts } end end # More actions... end
  • 41. Controller class PostsController < ApplicationController Respuesta para def index peticiones html. Al no @posts = Post.all especificar nada renderizará respond_to do |format| automaticamente la vista index.html.erb format.html format.js { render json: @posts } end end # More actions... end
  • 42. View Layout View <html> <head> <% content_for :header do %> <title>Awesome Rails App</title> <h1>Post List</h1> </head> <% end %> <body> <div id="header"> <p>This is the content!</p> <%= yield :header %> <ul> <div> <% @posts.each do |post| %> <div id="content"> <li><%= @post.title %></li> <%= yield %> <% end %> </div> </ul> </body> </html> Ruby ERB <% Ruby code -- inline with output %> <%= Ruby expression -- replace with result %> <%# comment -- ignored -- useful in testing %>
  • 43. Un par de acrónimos importantes en Rails
  • 44. CRUD • Las 4 operaciones básicas que se realizan sobre un objeto • Create (insertar objeto en BBDD) • Read (leer objeto de BBDD) • Update (actualizar objeto en BBDD) • Delete (borrar objeto de la BBDD)
  • 45. REST • Representative State Transfer • Objetos como recursos en la web • HTTP soporta GET, POST, PUT y DELETE http://bit.ly/enBQtL
  • 46. REST • Representative State Transfer • Objetos como recursos en la web • HTTP soporta GET, POST, PUT y DELETE Read - Create Read Read Update Delete http://bit.ly/enBQtL
  • 47. Relaciones entre Modelos http://bit.ly/15HtEh
  • 48. 1a1
  • 49. 1a1 con modelo intermedio 1 supplier tiene 1 account 1 supplier tiene 1 account_history a través su account 1 account pertenece a 1 supplier 1 account_history pertenece a 1 supplier
  • 50. 1aN
  • 51. NaN 3 tablas en la BBDD, pero solo 2 modelos en Rails!
  • 52. NaN con modelo intermedio 3 tablas en la BBDD y 3 modelos
  • 54. Migraciones • En Rails todas las modificaciones de la estructura de la BBDD deben hacerse a traves de migraciones. • Las migraciones son archivos Ruby almacenados en [app]/db/migrate • El nombre de archivo de cada migración lleva un timestamp que indica en que orden se ejecutarán. • Permiten crear tablas, modificar columnas, crear índices, etc. • Facilitan la colaboración entre programadores.
  • 55. Migraciones class CreatePost < ActiveRecord::Migration def change create_table :posts do |t| t.string :title t.text :content Por convención end end el nombre de las end tablas es siempre en plural
  • 56. Migraciones class CreatePost < ActiveRecord::Migration def change create_table :posts do |t| t.string :title t.text :content Por convención end end el nombre de las end tablas es siempre en plural
  • 57. Migraciones • Crear generate migration CreatePosts rails migración Rake permite ejecutar • Ejecutar migración rake db:migrate tareas. Hay algunas ya definidas como db:migrate, pero podemos crear tareas rake propias • Deshacer cambios de la última migración rake db:rollback
  • 58. Crear una app con Scaffolding De 0 a 100 en 1 minuto
  • 59. Creando una app • Creamos laapp_name rails new aplicación cd app_name rm public/index.html • * en Linux (Diacode Box) añadimos al Gemfile gem 'therubyracer' Es un intérprete de y ejecutamos en el terminal Javascript para Ruby. bundle install Es necesario para compilar los archivos • Arrancamos el servidor rails s en CoffeeScript. • El servidor corre en http://localhost:3000
  • 60. Haciendo Scaffold • Scaffold nos permite generar automáticamente Modelo, Controlador, Migraciones, etc. para un Modelo. rails generate scaffold Post title:string content:text • Ejecutamos las migraciones generadas rake db:migrate • En http://localhost:3000/posts tendremos un CRUD completamente funcional
  • 62. Consejos Prácticos • Consola de Ruby Ideal para probar cosas cuando desconocemos el lenguaje. irb • Consola de Rails Perfecta para probar métodos recién implementados y explorar la base de datos. cd [myapp] rails c
  • 63. Eso es todo por hoy. Ahora, os toca a vosotros.

Notes de l'éditeur

  1. \n
  2. \n
  3. \n
  4. \n
  5. \n
  6. \n
  7. \n
  8. \n
  9. \n
  10. \n
  11. \n
  12. \n
  13. \n
  14. \n
  15. \n
  16. \n
  17. \n
  18. \n
  19. \n
  20. \n
  21. \n
  22. \n
  23. \n
  24. \n
  25. \n
  26. \n
  27. \n
  28. \n
  29. \n
  30. \n
  31. \n
  32. \n
  33. \n
  34. \n
  35. \n
  36. \n
  37. \n
  38. \n
  39. \n
  40. \n
  41. \n
  42. \n
  43. \n
  44. \n
  45. \n
  46. \n
  47. \n
  48. \n
  49. \n
  50. \n
  51. \n
  52. \n
  53. \n
  54. \n
  55. \n
  56. \n
  57. \n
  58. \n
  59. \n
  60. \n
  61. \n
  62. \n
  63. \n