Introducción a RubyOnRails
Upcoming SlideShare
Loading in...5
×
 

Like this? Share it with your network

Share

Introducción a RubyOnRails

on

  • 4,385 views

Introducción al framework dictada en la Facultad de Ingeniería de la UDELAR

Introducción al framework dictada en la Facultad de Ingeniería de la UDELAR

Statistics

Views

Total Views
4,385
Views on SlideShare
4,379
Embed Views
6

Actions

Likes
4
Downloads
68
Comments
0

2 Embeds 6

http://www.slideshare.net 5
http://www.linkedin.com 1

Accessibility

Categories

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

Introducción a RubyOnRails Presentation Transcript

  • 1. Introducción a Ruby On Rails Ing. Pablo Marrero
  • 2. Agenda Ing. Pablo Marrero
    • Introducción
      • Qué es Ruby On Rails?
      • Historia
    • Pilares de RoR
      • Ruby
      • Convención sobre Configuración
      • DRY
      • Active Record (ORM)
      • Migrations
    • A codificar!
      • Instalación de Ruby y RoR
      • Herramientas de desarrollo
      • Ejemplo “mini” proyecto
  • 3. Introducción Ing. Pablo Marrero
    • Qué es Ruby On Rails?
      • Framework para Desarrollo de Aplicaciones Web
        • Brinda un Stack completo
    Java Hibernate TopLink JPA EJB Spring Struts JSF Ruby on Rails
  • 4. Introducción Ing. Pablo Marrero
    • Qué es Ruby On Rails?
      • Framework para Desarrollo de Aplicaciones Web
        • Brinda un Stack completo
    Java Hibernate TopLink JPA EJB Spring Struts JSF Ruby on Rails Active Record Action Pack Action View Action Controller
  • 5. Introducción Ing. Pablo Marrero
    • Qué es Ruby On Rails?
      • Basado en el Patron Model-View-Controller
        • Patrón de Arquitectura que separa los componentes de un sistema en tres roles
          • Modelo – La presentación de los datos y su relación entre ellos (lógica de negocios)
          • Vista – Interfaz de usuario
          • Controlador – Quien recibe los eventos generados en la Vista, interactúa con el Modelo y decide la siguiente vista a mostrar
    Modelo Vista Controlador Browser BD
  • 6. Introducción Ing. Pablo Marrero
    • Un poco de historia…..
    • Creado por David Heinemeier Hansson (DHH)
      • Extraído del desarrollo de Basecamp
      • Primera versión en Abril de 2004
      • Versión 1.0 liberada en Octubre de 2006
    • Desde su aparición se han creado varios “portes”
      • Java
        • Groovy (like Ruby) y Grails (like Rails)
        • Trails, basado en Tapestry-Spring-Hibernate
      • Php
        • CakePHP
    • Frameworks similares
      • Python
        • Django
  • 7. Agenda Ing. Pablo Marrero
    • Introducción
      • Qué es Ruby On Rails?
      • Historia
    • Pilares de RoR
      • Ruby
      • Convención sobre Configuración
      • DRY
      • Active Record (ORM)
      • Migrations
    • A codificar!
      • Instalación de Ruby y RoR
      • Herramientas de desarrollo
      • Ejemplo “mini” proyecto
  • 8. Pilares de RoR Ruby Ing. Pablo Marrero
    • RoR esta escrito sobre el lenguaje Ruby y esto es uno de los fundamentos de su éxito
    • Pero que es Ruby?
      • Lenguaje de programación, interpretado y dinámico
      • Completamente orientado a objetos
      • Inspirado en Smalltalk, Perl, Python
      • Creado por Yukihiro “Matz” Matsumoto por 1993
      • Rápidamente desplaza a Python y pasa a ser el lenguaje más utilizado en Japón
      • Enfatiza la comodidad del programador más que de la máquina
  • 9. Pilares de RoR Ruby Ing. Pablo Marrero
    • Completamente orientado a objetos
      • En ruby todo es un objeto y toda operación que se realice sobre un objeto será invocando uno de sus métodos 5 + 3 // retorna 8 5.+(3) // idem anterior
      • Los operadores base del lenguaje también son métodos y por lo tanto los podemos sobrescribir class Fixnum def +(other) >> 5 + 3 self – other => 2 end end
  • 10. Pilares de RoR Ruby Ing. Pablo Marrero
      • Implementa únicamente herencia simple
      • Para lograr comportamientos similares al de la herencia múltiple existen los mixins, que nos permite mezclar módulos dentro de la definición de una clase
      • Se dice que brinda lo mejor de la herencia múltiple sin la complejidad de ésta
  • 11. Pilares de RoR Ruby Ing. Pablo Marrero
    • Veamos algunos ejemplos
    variable_local @variable_de_instancia @@variable_de_clase $variable_global Clase CONSTANTE :simbolo metodo_de_instancia self.metodo_de_clase modifico_el_objeto! devuelvo_booleano?
  • 12. Pilares de RoR Ruby Ing. Pablo Marrero Las estructuras devuelven el valor de la ultima expresión evaluada: @user = if params[:id] User.find(params[:id]) else User.new end
  • 13. Pilares de RoR Ruby Ing. Pablo Marrero @post = Post.find(params[:id]) if @post @post.destroy end Mejor: if @post = Post.find(params[:id]) @post.destroy end
  • 14. Pilares de RoR Ruby Ing. Pablo Marrero Asignaciones condicionales @title = "Tıtulo generico" unless defined?(@title) @title ||= "Tıtulo generico“ @heading = if defined?(@subsection) @subsection.title else @section.title end @heading = ( @subsection || @section ).title
  • 15. Pilares de RoR Ruby Ing. Pablo Marrero Arrays @arr = [ 1, 2, 3, 4, 5 ] Iterando: @arr.each do |item| puts item end Que es el for de toda la vida: for item in @arr puts item end
  • 16. Pilares de RoR Ruby Ing. Pablo Marrero Utilidades Varias para Arrays .uniq [1,1,2,3,3].uniq >> [1,2,3] .flatten [[1,1],2,[3,3]].flatten >> [1,1,2,3,3] .compact [1,nil,2,nil,3].compact >> [1,2,3] .reverse [1,1,2,3,3].reverse >> [3,3,2,1,1] .sort [1,3,2,1,3].sort >> [1,1,2,3,3] .find [1,2,3].find {|n| n % 3 == 0 } >> 3 [1,2,3].find {|n| n % 5 == 0 } >> nil .find_all [1,3,5,6].find_all {|n| n % 3 == 0 } >> [3,6] [1,2,3].find_all {|n| n % 5 == 0 } >> []
  • 17. Pilares de RoR Ruby Ing. Pablo Marrero Que pasa con las clases? class Persona def nombre @nombre end def nombre=(nombre) @nombre = nombre end end No mas getter y setter!! class Persona attr_accesor :nombre, :apellido attr_reader :id attr_writer :notas end
  • 18. Pilares de RoR Ruby Ing. Pablo Marrero
    • En resumen Ruby es un lenguaje
      • Dinámico
      • Orientado a objetos puro
      • Fácil de programar!
    • Según su creador
    Yukihiro Matsumoto Often people, especially computer engineers, focus on the machines. They think, "By doing this, the machine will run faster. By doing this, the machine will run more efectively. By doing this, the machine will something something something."They are focusing on machines. But in fact we need to focus on humans, on how humans care about doing programming or operating the application of the machines. We are the masters. They are the slaves.
    • Un lenguaje que nos tiene como prioridad!
  • 19. Agenda Ing. Pablo Marrero
    • Introducción
      • Qué es Ruby On Rails?
      • Historia
    • Pilares de RoR
      • Ruby
      • Convención sobre Configuración
      • DRY
      • Active Record (ORM)
      • Migrations
    • A codificar!
      • Instalación de Ruby y RoR
      • Herramientas de desarrollo
      • Ejemplo “mini” proyecto
  • 20. Pilares de RoR Convención sobre Configuración Ing. Pablo Marrero
    • Mayor parte de los frameworks Web (y no web)
      • Tedioso inicio de un proyecto
      • Gran cantidad de configuración
    • Rails
      • Basado en el principio de CoC
      • Serie de convenciones a seguir
        • Algunos tipos de datos, campos sugeridos (id, created at y updated at, etc.)
        • Como se llaman las tablas y las clases, así como las tablas de relación (y que va en singular, que va en plural y como se determina como singularizar/pluralizar)
        • Como se organizan los archivos en nuestro árbol
  • 21. Pilares de RoR Convención sobre Configuración Ing. Pablo Marrero
    • Esto puede verse como una limitación, pero debe ser visto como una ayuda
      • En la mayoría de los proyectos, lo primero que realiza el equipo de desarrollo es ponerse de acuerdo en la nomenclatura a utilizar
      • Gracias al principio de CoC de rails, esta tarea se simplifica, y además si uno cambia de proyecto, no debe acostumbrarse a una nueva nomenclatura
      • Por último, si no deseamos seguir alguna de las convenciones utilizadas por Rails, siempre es posible hacerlo explicitándolo
  • 22. Agenda Ing. Pablo Marrero
    • Introducción
      • Qué es Ruby On Rails?
      • Historia
    • Pilares de RoR
      • Ruby
      • Convención sobre Configuración
      • DRY
      • Active Record (ORM)
      • Migrations
    • A codificar!
      • Instalación de Ruby y RoR
      • Herramientas de desarrollo
      • Ejemplo “mini” proyecto
  • 23. Pilares de RoR Dont Repeat Yourself Ing. Pablo Marrero
    • El código repetido no solo es una perdida de tiempo una vez, sino que muchas
      • Dar mantenimiento a pedazos repetidos de código es cada vez mas pesado
      • Requiere que todos los desarrolladores del proyecto conozcan todos los detalles del proyecto para no romperlo al reimplementar alguna parte
      • Si una determinada porción de código esta repetida, si cambia debo buscar en todo el proyecto y modificarla, con la consecuente posibilidad de introducción de errores, etc.
  • 24. Pilares de RoR Dont Repeat Yourself Ing. Pablo Marrero
    • DRY
      • Separar nuestro código en bibliotecas, o utilizar helpers en las diferentes partes del código, nos permite aplicarlo en diferentes proyectos
      • Con la ayuda de estas bibliotecas y helpers la programación se hace mas clara y sencilla
    • Como consecuencia de este principio
    • Menos Código => Menos posibilidad de Error
  • 25. Agenda Ing. Pablo Marrero
    • Introducción
      • Qué es Ruby On Rails?
      • Historia
    • Pilares de RoR
      • Ruby
      • Convención sobre Configuración
      • DRY
      • Active Record (ORM)
      • Migrations
    • A codificar!
      • Instalación de Ruby y RoR
      • Herramientas de desarrollo
      • Ejemplo “mini” proyecto
  • 26. Pilares de RoR Active Record Ing. Pablo Marrero
    • Se trata de un patrón de diseño
      • Propuesto por Martin Fowler
      • Cuyo cometido es encapsular el acceso a BD
      • Mapeando tablas a clases y tuplas a objetos
    • El Patrón Active Record
      • Realiza el mapeo directo
      • Simple, no maneja relaciones entre objetos
      • Simplemente un método find y getters/setters
  • 27. Pilares de RoR Active Record Ing. Pablo Marrero
    • La librería de Rails
      • Basado en el principio DRY
      • Utiliza convenciones (nombre de clase es el singular del nombre de la tabla)
      • Brinda validadores (validates_presence_of, etc)
      • Filtros before y after (before_update, after_delete, etc)
      • Agnóstico en cuanto a BD a utilizar
      • Relaciones entre objetos (has_many, belongs_to, etc)
  • 28. Pilares de RoR Active Record Ing. Pablo Marrero
    • Ejemplos
      • Para realizar el mapeo en Rails hacemos que nuestra clase herede de ActiveRecord::Base
    • class Order < ActiveRecord::Base
    • end
    • Con esta declaración ya tengo acceso a la tabla Orders que mencionamos antes, con lo cual ya puedo hacer…
    • order = Order.find(1)
    • put order.number “ - ” order.description
    • >> 1 - descripcion
  • 29. Pilares de RoR Active Record Ing. Pablo Marrero
    • Los métodos find
      • Order.find(23)
      • Order.find(:first)
      • Order.find(:all, :offset => 10, :limit => 10)
      • Order.find_by_description(“order1”)
    • Find con condiciones
      • En el símbolo conditions se puede colocar cualquier sentencia sql
      • Order.find(:all, :conditions => [‘description = ?’, ‘desc1’])
      • Sql ejecutada
      • Select * from orders where description = “desc1”;
  • 30. Pilares de RoR Active Record Ing. Pablo Marrero
    • Find con orden
      • En el símbolo order se puede colocar cualquier sentencia sql
      • Order.find(:all, :order => ‘description’)
      • Sql ejecutada
      • Select * from orders order by description;
    • Otros Find
      • find_by_attr
        • Métodos “comodin”, en attr podemos colocar cualquier atributo de nuestro modelo
        • Order.find_by_description(‘desc1’);
        • Incluso concatenarlos
        • Order.find_by_description_and_number(‘desc1’,1);
  • 31. Pilares de RoR Active Record Ing. Pablo Marrero
    • Relaciones
      • Para expresar relaciones One to One
        • Utilizar has_one en el modelo base y belongs_to en el modelo asociado
        • class Employee < ActiveRecord::Base
        • has_one :office //Cuando la fk esta en la
        • // otra tabla
        • end
        • class Office < ActiveRecord::Base
        • belongs_to :employee //fk aquí (employee_id)
        • end
        • >> joe_employee = Employee.find_by_first_name('joe')
        • SELECT * FROM employees WHERE (employees.`first_name` = 'joe') LIMIT 1
        • >> joes_office = joe_employee.office
        • SELECT * FROM offices WHERE (offices.employee_id = 1) LIMIT 1
        • >> joes_office.employee
        • SELECT * FROM employees WHERE (employees.`id` = 1)
  • 32. Pilares de RoR Active Record Ing. Pablo Marrero
      • Para expresar relaciones One to Many
        • Utilizar has_many en el modelo base y belongs_to en el modelo asociado
        • class Employee < ActiveRecord::Base
        • belongs_to :manager //fk va aquí (manager_id)
        • end
        • class Manager < ActiveRecord::Base
        • has_many :employees
        • end
  • 33. Pilares de RoR Active Record Ing. Pablo Marrero
      • Para expresar relaciones Many to Many
        • Utilizar has_many en los modelos base y belongs_to en el modelo de relacion
        • class Appearance < ActiveRecord::Base
        • belongs_to :dancer
        • belongs_to :movie
        • end
        • class Dancer < ActiveRecord::Base
        • has_many :appearances, :dependent => true
        • has_many :movies, :through => :appearances
        • end
        • class Movie < ActiveRecord::Base
        • has_many :appearances, :dependent => true
        • has_many :dancers, :through => :appearances
        • end
  • 34. Pilares de RoR Active Record Ing. Pablo Marrero
    • Validaciones
      • Contamos con un juego de validaciones extenso, listo para su uso
      • Algunos ejemplos
      • class User < ActiveRecord::Base
      • validates_confirmation_of :login, :password
      • validates_confirmation_of :email,
      • :message => &quot;should match confirmation&quot;
      • validates_format_of :email,
      • :with => /A([^@s]+)@((?:[-a-z0-9]+.)+[a-z]{2,})/i,
      • :on => :create
      • end
  • 35. Pilares de RoR Active Record Ing. Pablo Marrero
    • Filtros before y after
      • AR nos brinda un conjunto de filtros que podemos utilizar para ejecutar acciones ante algún acontecimiento
      • Por ejemplo
      • class Subscription < ActiveRecord::Base
      • before_create :record_signup
      • private
      • def record_signup
      • self.signed_up_on = Date.today
      • end
      • end
  • 36. Pilares de RoR Active Record Ing. Pablo Marrero
    • Filtros before y after
      • Orden de ejecución de los filtros
    • * (-) save
    • * (-) valid?
    • * (1) before_validation
    • * (2) before_validation_on_create
    • * (-) validate
    • * (-) validate_on_create
    • * (3) after_validation
    • * (4) after_validation_on_create
    • * (5) before_save
    • * (6) before_create
    • * (-) create
    • * (7) after_create
    • * (8) after_save
  • 37. Agenda Ing. Pablo Marrero
    • Introducción
      • Qué es Ruby On Rails?
      • Historia
    • Pilares de RoR
      • Ruby
      • Convención sobre Configuración
      • DRY
      • Active Record (ORM)
      • Migrations
    • A codificar!
      • Instalación de Ruby y RoR
      • Herramientas de desarrollo
      • Ejemplo “mini” proyecto
  • 38. Pilares de RoR Migrations Ing. Pablo Marrero
    • Una de las principales fuentes de problemas en muchos proyectos es que los programadores pueden ser excelentes en un lenguaje y no tanto en otro...
    • Los ORMs como Hibernate, esconden el SQL, presentándonos una interfaz directa en nuestro lenguaje de aplicación... Pero no resuelven como crear la estructura de datos
    • Rails incluye el concepto de migraciones, que nos permiten definir o modificar la estructura de nuestra BD desde Ruby, y además, hacerlo de manera independiente del motor de BD que elijamos
  • 39. Pilares de RoR Migrations Ing. Pablo Marrero
    • Las migraciones nos permiten además manejar versiones de todo el entorno de nuestra aplicación, simplificándonos en gran medida el despliegue a servidores de producción
    • Se van numerando en orden secuencial las migraciones y en la base se almacena el nro de versión actual (hasta versiones anteriores a 2.1)
      • En 2.1 las migrations se numeran con un timestamp en UTC y se lleva un registro de cada ejecución
      • Este comportamiento es para contemplar equipos de desarrollo, y que las migrations de cada uno no se sobrescriban
  • 40. Pilares de RoR Migrations Ing. Pablo Marrero
    • Este manejo nos brinda la posibilidad de volver a una determinada versión de la base de datos, etc…,
    • Rails brinda una serie de generadores entre los cuales se encuentra el generador de migrations
  • 41. Pilares de RoR Migrations Ing. Pablo Marrero
    • Ejemplos
      • Generando una migración para la tabla Products
    • ruby script/generate migration create_table_product class CreateTableProduct < ActiveRecord::Migration
      • def self.up
      • end
      • def self.down
      • end
      • end
  • 42. Pilares de RoR Migrations Ing. Pablo Marrero
    • Creamos la tabla
    • ruby script/generate migration create_table_orders class CreateTableOrders < ActiveRecord::Migration
      • def self.up
            • create_table :orders do |t|
          • t.integer :number
          • t.string :description
          • t.timestamps
          • end
      • end
      • def self.down
      • drop_table :orders
      • end
      • end
  • 43. Pilares de RoR Migrations Ing. Pablo Marrero
    • Algunos modificadores a tener en cuenta
      • :limit
        • Indica el tamaño máximo del campo
      • :precision
        • Indica la precisión del campo si se trata de un number
      • :null
        • Indica si acepta nulos o no
      • :default
        • Indica el valor por defecto para el campo
  • 44. Pilares de RoR Migrations Ing. Pablo Marrero
    • Algunos “metodos” a tener en cuenta
      • create_table, drop_table
        • Crea/Elimina una tabla en la BD
      • change_column
        • Modifica una columna de una tabla, por ejemplo para modificar la columna order_type de la tabla orders change_column :orders, :order_type, :string
      • rename_table
        • Renombra una determinada tabla en la BD
      • add_index, remove_index
        • Crea/Elimina un índice de una tabla en la BD
  • 45. Agenda Ing. Pablo Marrero
    • Introducción
      • Qué es Ruby On Rails?
      • Historia
    • Pilares de RoR
      • Ruby
      • Convención sobre Configuración
      • DRY
      • Active Record (ORM)
      • Migrations
    • A codificar!
      • Instalación de Ruby y RoR
      • Herramientas de desarrollo
      • Ejemplo “mini” proyecto
  • 46. A Codificar! Instalación de Ruby y RoR Ing. Pablo Marrero
    • Para tener un ambiente en que podamos desarrollar en RoR, debemos seguir los siguientes pasos
      • Instalación de Ruby
        • Dependiendo del Sistema Operativo
          • Si estoy en Windows, existe un instalador el cual nos instala Ruby y además Gems
          • Si estoy en *nix dos opciones
            • Bajar y compilar ruby siguiendo las instrucciones
            • Instalar los paquetes correspondientes a cada distro
        • En el sitio de Ruby existen guias claras para la instalacion en cada uno de los sistemas operativos
  • 47. A Codificar! Instalación de Ruby y RoR Ing. Pablo Marrero
      • Instalación de Gems
        • Gems es el gestionador de paquetes de ruby, análogo al apt-get de debian
        • Si estoy en Windows me quedo instalado en el paso anterior
        • De lo contrario bajarlo e instalarlo
  • 48. A Codificar! Instalación de Ruby y RoR Ing. Pablo Marrero
    • Ahora debemos instalar RoR
      • Utilizando gems en una consola ejecutamos gem install rails
      • Con esto queda instalado RoR
    • Por ultimo debemos contar con una Base de Datos para trabajar con nuestros nuevos proyectos
      • Como nombramos antes RoR es agnóstico en cuanto a la BD por lo que podemos instalar cualquiera (Mysql, Postgresql, Oracle, DB2, etc)
      • Para los ejemplos vamos a utilizar Mysql
  • 49. Agenda Ing. Pablo Marrero
    • Introducción
      • Qué es Ruby On Rails?
      • Historia
    • Pilares de RoR
      • Ruby
      • Convención sobre Configuración
      • DRY
      • Active Record (ORM)
      • Migrations
    • A codificar!
      • Instalación de Ruby y RoR
      • Herramientas de desarrollo
      • Ejemplo “mini” proyecto
  • 50. A Codificar! Herramientas de Desarrollo Ing. Pablo Marrero
    • Básicamente para trabajar con RoR se necesitan
      • Un editor de texto
      • Una consola para ejecutar comandos (rake, ruby, etc)
      • Un browser para ir ejecutando la aplicación
    • Pero los que venimos de Java queremos un IDE!
      • Para nosotros tenemos la opción de
        • NetBeans 6.1
          • Tiene soporte para RoR con “todo” lo que estamos acostumbrados a utilizar en Java
        • RadRails ( http://www.aptana.com/rails/ )
          • IDE basado en eclipse
  • 51. Agenda Ing. Pablo Marrero
    • Introducción
      • Qué es Ruby On Rails?
      • Historia
    • Pilares de RoR
      • Ruby
      • Convención sobre Configuración
      • DRY
      • Active Record (ORM)
      • Migrations
    • A codificar!
      • Instalación de Ruby y RoR
      • Herramientas de desarrollo
      • Ejemplo “mini” proyecto
  • 52. A Codificar! Mini Proyecto Ing. Pablo Marrero
    • DEMO
  • 53. Recursos Web Ing. Pablo Marrero
    • Sitio de Ruby
      • http://www.ruby-lang.org/es/
    • Sitio de RoR
      • http://www.rubyonrails.org/
    • Noticias de Ruby
      • http://www.rubyinside.com/
    • Noticias de RoR
      • http://www.railsinside.com/
    • Grupo de Usuarios Ruby del Uruguay
      • http://www.ruguy.org/
  • 54. Libros Ing. Pablo Marrero
    • Agile Web Development With Rails
    • Programming Ruby
  • 55. ¿ Preguntas ? Ing. Pablo Marrero
  • 56. Referencias Ing. Pablo Marrero
    • Charla Introducción a Ruby
      • Dictada por Diego Algorta Casamayou
      • http://www.archive.org/details/20060913_ruby_en_15_minutos
      • www.oboxodo.com
    • Charla Introduction to Active Record
      • Dictada por Evan ‘Rabble’ Henshaw-Plath
      • http://www.slideshare.net/rabble/introduction-to-active-record-silicon-valley-ruby-conference-20007
  • 57. Muchas Gracias! Ing. Pablo Marrero
    • Ing. Pablo Marrero
      • [email_address]