Taller de Introducción a Ruby on Rails

3,371 views
3,282 views

Published on

Talle de Introducción a Ruby on Rails 3.2 impartido en Diacode Talks!

http://talks.diacode.com
http://diacode.com
http://twitter.com/diacode

Published in: Technology
0 Comments
3 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
3,371
On SlideShare
0
From Embeds
0
Number of Embeds
4
Actions
Shares
0
Downloads
23
Comments
0
Likes
3
Embeds 0
No embeds

No notes for slide
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • Taller de Introducción a Ruby on Rails

    1. 1. Javier Cuevas - Diacode.com
    2. 2. Ruby Rails
    3. 3. Ruby Rails• Lenguaje de programación interpretado.
    4. 4. Ruby Rails• Lenguaje de programación interpretado.• Todo son objetos
    5. 5. Ruby Rails• Lenguaje de programación interpretado.• Todo son objetos• Tipado dinámico
    6. 6. Ruby Rails• Lenguaje de programación interpretado.• Todo son objetos• Tipado dinámico• Sintaxis limpia e intuitiva
    7. 7. Ruby Rails• Lenguaje de programación interpretado.• Todo son objetos• Tipado dinámico• Sintaxis limpia e intuitiva• RubyGems: gestor de paquetes (gemas)
    8. 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. 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. 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. 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. 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. 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. 14. Algunas cosas raras de Ruby
    15. 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. 16. if y unless al final de línea puts es par if number.even? puts es par unless number.odd?
    17. 17. Llamadas a métodos sin paréntesisresults = method_name param1, param2results = method_name(param1, param2)results = method_name(param1, param2).another_method
    18. 18. Símbolos
    19. 19. Símbolos• :my_symbol
    20. 20. Símbolos• :my_symbol• NO son variables. NO son constantes.
    21. 21. Símbolos• :my_symbol• NO son variables. NO son constantes.• Podemos verlos como etiquetas.
    22. 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. 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. 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. 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
    26. 26. ModelViewController
    27. 27. View Web ControllerServer Model
    28. 28. View Web ControllerServer Model
    29. 29. View Web ControllerServer Model
    30. 30. View Web ControllerServer Model
    31. 31. View Web ControllerServer Model
    32. 32. View Web ControllerServer Model
    33. 33. View Web ControllerServer Model
    34. 34. View Web ControllerServer Model
    35. 35. View Web ControllerServer Model
    36. 36. View Web ControllerServer Model
    37. 37. MVC en Rails View Helpers WebServer Routes Controller Model ActiveRecord
    38. 38. MVC en Rails View Helpers Web Server Routes ControllerBuena práctica:Mantén los Controladores Modelcon el menor número delineas de código.Mueve toda la lógica de tuaplicación al Modelo. ActiveRecord
    39. 39. ModelNo esnecesario class Post < ActiveRecord::Baseespecificar # Relationships has_many :commentslosatributos # Validationsdel objeto validates :title, :presence => true validates :content, :presence => trueen la clase. # Class methodsRails def self.all_posts_by_diacode # ...buscará enddirectamente en la # Instance methodsBBDD def is_recent? # ... end end
    40. 40. Controllerclass PostsController < ApplicationController def index @posts = Post.all respond_to do |format| format.html format.js { render json: @posts } end end # More actions...end
    41. 41. Controllerclass 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. 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. 43. Un par de acrónimosimportantes en Rails
    44. 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. 45. REST• Representative State Transfer• Objetos como recursos en la web• HTTP soporta GET, POST, PUT y DELETE http://bit.ly/enBQtL
    46. 46. REST• Representative State Transfer• Objetos como recursos en la web• HTTP soporta GET, POST, PUT y DELETE Read -Create Read ReadUpdate Delete http://bit.ly/enBQtL
    47. 47. Relacionesentre Modelos http://bit.ly/15HtEh
    48. 48. 1a1
    49. 49. 1a1con 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. 50. 1aN
    51. 51. NaN 3 tablas en la BBDD, pero solo 2 modelos en Rails!
    52. 52. NaNcon modelo intermedio 3 tablas en la BBDD y 3 modelos
    53. 53. MigracionesCrear y modificar la BBDD
    54. 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. 55. Migracionesclass CreatePost < ActiveRecord::Migration def change create_table :posts do |t| t.string :title t.text :content Por convención end end el nombre de lasend tablas es siempre en plural
    56. 56. Migracionesclass CreatePost < ActiveRecord::Migration def change create_table :posts do |t| t.string :title t.text :content Por convención end end el nombre de lasend tablas es siempre en plural
    57. 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. 58. Crear una app con ScaffoldingDe 0 a 100 en 1 minuto
    59. 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. 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
    61. 61. Consejosprácticos(¡y ya terminamos!)
    62. 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. 63. Eso es todo por hoy.Ahora, os toca a vosotros.

    ×