Upload
lenny
View
3.515
Download
1
Embed Size (px)
DESCRIPTION
Esta es la presentación correspondiente a la charla "Descubriendo Ruby on Rails: Desarrollo Agil de Aplicaciones Web" dictada el 5 de Junio de 2007 por Juan Maria Martinez Arce y Carlos Kozuszko, ambos miembros de INSIGNIA (www.insignia4u.com); en el marco de la "Semana de la Ingenieria 2007".
Citation preview
(in)signiapresenta
Juan María Martinez Arce
Carlos Kozuszko
Descubriendo Ruby on RailsDesarrollo Agil de Aplicaciones Web
> tiempo > productividad
¡Tiempo!
¿Desarrollo Web?
Aplicación Web = Aplicación accedida por Browser
Internet
+ Cobertura Global
+ Bajos requerimientos de Hardware
+ Fácil de Usar
+ Mantenimiento
- Seguridad
Desktop vs Web
Mejores Prácticas
DRYDon’t Repeat Yourself!
MVCModel View Controller
ORMObject Relational Mapping
ORM – Active Record
Control de Versiones
Convention over ConfigurationConvención sobre configuración
Frameworks
Frameworks & Libraries
Frameworks tradicionales
• Struts - Java
• Springs - Java
• PHP + templates + ORM
• Catalyst - Perl
Frameworks ágiles
• Ruby on Rails – Ruby
• CakePHP – PHP
• Django – Python
Conociendo (in)signia
• 4 Desarrolladores
• 2 Diseñadores
• 7 proyectos en curso:– Portal de Noticias– Extranet de Clientes– Campus Virtual– Catálogo de Productos
¿Cómo hacemos?
(in)signia elige
(in)signia elige
(in)signia elige
(in)signia elige
¿Por qué Ruby on Rails?
class Empresa < ActiveRecord::Base belongs_to :vendedor has_many :usuarios validates_presence_of :razon_social validates_uniqueness_of :codigoend
Empresa.find(:all)Empresa.find(params[:id])Empresa.find_by_codigo(params[:codigo])Empresa.find_or_create_by_codigo(params[:codigo])
@empresa = Empresa.find(params[:id])@empresa.razon_social = ’(in)signia’@empresa.codigo = ’000999100’@empresa.save!
class EmpresasController < ApplicationController administrate_me :search => [‘razon_social’], :accepted => [:show],
:secured => true end
cap deploy
¡Nos gusta mucho!
Puntos fuertes de Rails
Open Source
Plataformas soportadas
• Servidores y entornos de desarrollo
– Linux/Unix– Windows– Mac OS X
• Servidores Web
– Apache– Lighttpd– IIS
• Bases de datos
– MySql– SQLite– Postgres– Oracle– MS SQL Server– DB2
Convención sobre Configuración
Ventajas
• ORM• Migraciones• Mapeo de peticiones
HTTP
• Soporte para AJAX• Plugins
class Empresa < ActiveRecord::Base belongs_to :vendedor, :class => “Persona” has_many :usuariosend
class Usuario < ActiveRecord::Base belongs_to :empresaend
class Persona < ActiveRecord::Base has_many :empresasend
vendedores = Persona.find(:all)vendedores.each do |vendedor| vendedor.empresas.each do |empresa| empresa.activar! puts “Empresa #{empresa} activada.” endend
class CreatePersonas < ActiveRecord::Migration def self.up create_table :personas do |t| t.column :nombre, :string t.column :apellido, :string t.column :domicilio, :string end end
def self.down drop_table :personas endend
class CreateEmpresas < ActiveRecord::Migration def self.up create_table :empresas do |t| t.column :razon_social, :string t.column :cuit, :string t.column :vendedor_id, :integer end end
def self.down drop_table :empresas endend
ActionController::Routing::Routes.draw do |map| map.connect “”, :controller => “login”, :action => “index” map.connect “:controller/:action/:id”end
http://www.demo.com -> LoginController.indexhttp://www.demo.com/empresas/show/1 -> EmpresasController.showhttp://www.demo.com/empresas/edit/1 -> EmpresasController.edithttp://www.demo.com/personas/show/5 -> PersonasController.showhttp://www.demo.com/personas/edit/5 -> PersonasController.edit
class PersonasController < ApplicationController
def show @persona = Persona.find(params[:id]) end
end
<html> <body> <p>Hola <%= @persona.nombre %></p> </body></html>
<html> <body> <% form_for :persona, @persona do |f| %> <label> Nombre: <%= f.text_field :nombre %> </label> <% end %> </body></html>
<html> <body> <p id=“hora”> Hora: <%= Time.now %></p> <%= link_to_remote “Actualizar!”, :url => {:action => “actualizar”}, :update => “hora” %> </body></html>
Plugins
• acts_as_authenticated• file_column• annotate_models• exception_notification• permalink_fu
• textile_editor_helper• liquid• asset_packager• acts_as_ferret
Menos conversación… Más acción(elvis)
¿dudas, consultas, opiniones?(trataremos de responder)
Muchas gracias!