Este documento describe las características principales de Ruby y Rails. Ruby es un lenguaje de programación interpretado orientado a objetos con tipado dinámico y sintaxis limpia. Rails es un framework MVC para Ruby que incluye ORM y sigue el patrón convención sobre configuración. Ambos se basan en los principios de programación orientada a objetos y son populares para el desarrollo web.
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”
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
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 %>
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
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
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.