SlideShare uma empresa Scribd logo
1 de 32
Baixar para ler offline
Aprendendo Ruby on Rails – Aula 1


                     Maurício Linhares
Por que Rails?
}    Escrito em Ruby (sim, isso é uma vantagem);

}    Baseado em necessidades reais, não em um comitê (JSF,
      estou olhando pra você);

}    Convenção e padrões em vez de configuração;

}    Respostas rápidas a alterações feitas em código;
Por que Rails?
}    Desenvolvido de forma aberta com uma licença
      permissiva e business friendly (MIT);

}    Comunidade ativa e focada em desenvolvimento web que
      já produziu plugins e integrações com várias ferramentas
      comuns;

}    Vários livros, muita documentação disponível de forma
      gratuita e aparição massiva em eventos de
      desenvolvimento;
De onde vem o Rails?
}    David Heinemeier Hanson;

}    37 Signals;

}    Basecamp;

}    Foi lançado em julho de 2004 e a equipe de
      desenvolvimento começou a ser formada em fevereiro de
      2005;
Estrutura do framework



               ActiveSupport



ActiveRecord    ActionPack     ActionView
ActiveSupport
}    Contém classes utilitárias genéricas que são utilizadas por
      todo o framework e aplicações escritas com ele;

}    Adiciona novas funcionalidades a classes padrão do Ruby,
      como Array e Hash;

}    É dependência obrigatória de qualquer aplicação Rails;
ActiveRecord
}    Biblioteca de mapeamento objeto/relacional padrão do
      Rails;

}    Faz a ponte entre o banco de dados relacional e os
      objetos que permeiam a aplicação;

}    Contém a implementação das Migrations que são a forma
      evolutiva de tratar os bancos de dados trazida pelo Rails;
ActionPack e ActionView
}    Fazem a ponte entre o navegador web e o código da
      aplicação;

}    O ActionPack faz a recepção e tratamento de requisições
      vindas dos clientes, incluindo controle de sessão e
      autenticação de clientes;

}    O ActionView contém as classes utilizadas para gerar
      saída para os clientes da aplicação web;
MVC - Arquitetura de aplicações Rails

                Model -
              ActiveRecord




        View -         Controller -
      ActionView     ActionController
Workflow comum
}    O Controler recebe uma requisição;

}    Transforma os dados da requisição e os repassa para o
      Model;

}    Recebe os resultados do Model e os repassa para a View;
Controller
}    Rotear requisições para os componentes corretos;

}    Transformar os dados da requisição em uma forma
      aceitável para o modelo;

}    Chamar o modelo para executar a lógica nos dados já
      tratados;

}    Entregar o resultado da lógica do modelo para a camada
      de visualização;
Model
}    O coração da aplicação, onde vive toda lógica de negócio
      da mesma;

}    Pode ou não ser representado por objetos ActiveRecord
      e se comunicar com o banco de dados;

}    Também podem ser serviços, objetos que encapsulam
      uma lógica complexa de negócio ou que falam com
      outros sistemas;
View
}    Apresenta as informações para o cliente, que pode ser
      um usuário real ou ainda outro sistema;

}    Não pode conter lógica de negócio, deve apenas mostrar
      a informação e ter código relacionado a apresentação dos
      dados;

}    Deve sempre receber os dados prontos do Controller;
MVC no Rails

} app/
  } controllers
  } helpers
  } models
  } Views
  } assets
Helpers?
}    São objetos que servem pra ajudar a visualização a
      mostrar dados para os clientes;

}    Em vez de se utilizar de tags especiais ou poluir a página
      HTML com código Ruby, ele deve viver nas classes
      Helper;

}    Devem ser utilizadas somente para código relacionado a
      apresentação de informação;
Criando o produto




}    rails generate migration criar_produtos
Escrevendo a migração
class CriarProdutos < ActiveRecord::Migration

 def self.up

  create_table :produtos do |t|
   t.string :nome, :null => false
   t.text :descricao
   t.decimal :preco, :precision => 10, :scale => 2, :null => false
   t.timestamps
  end

 end

 def self.down
  drop_table :produtos
 end

end
Tipos disponíveis nas migrações
Mais parâmetros em um migration
}    :null – indica se pode ser null ou não (true-false)

}    :limit – indica o tamanho máximo do campo

}    :default – indica o valor padrão do campo

}    :precision – indica a precisão do número

}    :scale – indica a escala do número (quantas casas depois
      da vírgula)
Criando o banco e executando a migração
}    rake db:create

}    rake db:migrate
Criando o modelo em app/models/
produto.rb

class Produto < ActiveRecord::Base

 validates_presence_of :nome, :preco
 validates_numericality_of :preco, :greater_than =>
  0, :allow_nil => true

end
ActiveRecord::Base
}    Todas as classes que acessam o banco de dados devem
      herdar de ActiveRecord::Base ou de um dos seus
      descendentes;

}    Cada uma das classes deve representar uma tabela no
      banco de dados;

}    Dentro dessa classe ficam definidas as validações e
      associações com outros objetos;
Criando o controlador – app/controllers/
produtos_controller.rb
class ProdutosController < ApplicationController

 def index
  @produtos = Produto.all
  respond_to do |format|
   format.html
   format.xml do
      render :xml => @produtos
   end
  end
 end

end
Criando um controller
}    Todos os controllers da aplicação devem herdar de
      ApplicationController ou de um dos seus descendentes;

}    Produto.all retorna todos os objetos da tabela
      “produtos”;

}    Com o uso de respond_to é possível usar um mesmo
      código e retornar formatos diferentes;
Roteando requisições para o lugar certo –
config/routes.rb
 resources :produtos
 root :to => ’produtos#index'
Definições
}    root - mapeia a rota raiz da aplicação “/” – é necessário
      remover o arquivo “public/index.html”

}    match – mapeia uma URL para uma ação ou controller,
      aceita os parâmetros especiais:
      }    :controller
      }    :action
      }    :format
      }    Além da possibilidade de se definir os seus próprios
            parâmetros
      }    match “produtos/:action/:id” => “produtos#:action”
map.resources – REST - Representational
State Transfer
}    HTTP é um protocolo de troca de documentos ou
      recursos;

}    Os recursos são identificados através de URLs;

}    Uma aplicação web é um conjunto navegável de recursos;
rake:routes
produtos GET /produtos(.:format)
   {:action=>"index", :controller=>"produtos"}

POST /produtos(.:format)             {:action=>"create", :controller=>"produtos"}

new_produto GET /produtos/new(.:format)
  {:action=>"new", :controller=>"produtos"}

edit_produto GET /produtos/:id/edit(.:format)
   {:action=>"edit", :controller=>"produtos"}

produto GET /produtos/:id(.:format)
   {:action=>"show", :controller=>"produtos"}

PUT    /produtos/:id(.:format)       {:action=>"update", :controller=>"produtos"}

DELETE /produtos/:id(.:format)        {:action=>"destroy", :controller=>"produtos“}
Os métodos HTTP mais comuns
}    GET – “pegar” um documento

}    POST – enviar dados para o servidor

}    DELETE – apagar um documento no servidor

}    PUT – atualizar um documento no servidor
Idempotência
}    Alguns métodos HTTP podem ser chamados várias vezes
      para o mesmo recurso sem causar efeitos colaterais ou
      recebendo sempre a mesma resposta – GET, PUT,
      DELETE;

}    O Método POST não é idempotente, cada chamada vai
      causar um efeito diferente no servidor e as respostas não
      vão necessariamente ser as mesmas;
Layout base da aplicação – app/views/
layouts/application.html.erb
}    É a estrutura base onde as outras páginas da aplicação
      vão ser inseridas;

}    Cada aplicação pode ter mais do que um arquivo de
      layout, o uso ou não do layout depende da configuração
      na hora que a página está sendo gerada;
Arquivos .html.erb
}    São arquivos que vão conter marcação HTML comum e
      também código Ruby;

}    Todas as variáveis de instância que estavam no controller,
      ficam disponíveis na página;

}    Para entrar em um bloco de código Ruby, basta fazer <%
      %>;

}    Para gerar texto dentro da página, basta fazer <%= %>;

Mais conteúdo relacionado

Destaque

1,2,3 live! fronted optimizations @ guru sc - 2011.10.01
1,2,3 live! fronted optimizations @ guru sc - 2011.10.011,2,3 live! fronted optimizations @ guru sc - 2011.10.01
1,2,3 live! fronted optimizations @ guru sc - 2011.10.01Carlos Antonio da Silva
 
railties @ ruby mastersconf - 2011.02.26
railties @ ruby mastersconf - 2011.02.26railties @ ruby mastersconf - 2011.02.26
railties @ ruby mastersconf - 2011.02.26Carlos Antonio da Silva
 
railties @ encontro guru sc (nao apresentado) - 2010.09.18
railties @ encontro guru sc (nao apresentado) - 2010.09.18railties @ encontro guru sc (nao apresentado) - 2010.09.18
railties @ encontro guru sc (nao apresentado) - 2010.09.18Carlos Antonio da Silva
 
Lightning Talk #9: How UX and Data Storytelling Can Shape Policy by Mika Aldaba
Lightning Talk #9: How UX and Data Storytelling Can Shape Policy by Mika AldabaLightning Talk #9: How UX and Data Storytelling Can Shape Policy by Mika Aldaba
Lightning Talk #9: How UX and Data Storytelling Can Shape Policy by Mika Aldabaux singapore
 
SEO: Getting Personal
SEO: Getting PersonalSEO: Getting Personal
SEO: Getting PersonalKirsty Hulse
 
32 Ways a Digital Marketing Consultant Can Help Grow Your Business
32 Ways a Digital Marketing Consultant Can Help Grow Your Business32 Ways a Digital Marketing Consultant Can Help Grow Your Business
32 Ways a Digital Marketing Consultant Can Help Grow Your BusinessBarry Feldman
 

Destaque (8)

1,2,3 live! fronted optimizations @ guru sc - 2011.10.01
1,2,3 live! fronted optimizations @ guru sc - 2011.10.011,2,3 live! fronted optimizations @ guru sc - 2011.10.01
1,2,3 live! fronted optimizations @ guru sc - 2011.10.01
 
rails3 @ rsonrails - 2010.08.21
rails3 @ rsonrails - 2010.08.21rails3 @ rsonrails - 2010.08.21
rails3 @ rsonrails - 2010.08.21
 
devise @ rails summit 2009 - 2009.10.13
devise @ rails summit 2009 - 2009.10.13devise @ rails summit 2009 - 2009.10.13
devise @ rails summit 2009 - 2009.10.13
 
railties @ ruby mastersconf - 2011.02.26
railties @ ruby mastersconf - 2011.02.26railties @ ruby mastersconf - 2011.02.26
railties @ ruby mastersconf - 2011.02.26
 
railties @ encontro guru sc (nao apresentado) - 2010.09.18
railties @ encontro guru sc (nao apresentado) - 2010.09.18railties @ encontro guru sc (nao apresentado) - 2010.09.18
railties @ encontro guru sc (nao apresentado) - 2010.09.18
 
Lightning Talk #9: How UX and Data Storytelling Can Shape Policy by Mika Aldaba
Lightning Talk #9: How UX and Data Storytelling Can Shape Policy by Mika AldabaLightning Talk #9: How UX and Data Storytelling Can Shape Policy by Mika Aldaba
Lightning Talk #9: How UX and Data Storytelling Can Shape Policy by Mika Aldaba
 
SEO: Getting Personal
SEO: Getting PersonalSEO: Getting Personal
SEO: Getting Personal
 
32 Ways a Digital Marketing Consultant Can Help Grow Your Business
32 Ways a Digital Marketing Consultant Can Help Grow Your Business32 Ways a Digital Marketing Consultant Can Help Grow Your Business
32 Ways a Digital Marketing Consultant Can Help Grow Your Business
 

Semelhante a Aprendendo Rails

ASP.NET MVC - Alexandre Tarifa
ASP.NET MVC - Alexandre TarifaASP.NET MVC - Alexandre Tarifa
ASP.NET MVC - Alexandre Tarifaguestea329c
 
Workshop Ruby on Rails dia 2 ruby-pt
Workshop Ruby on Rails dia 2  ruby-ptWorkshop Ruby on Rails dia 2  ruby-pt
Workshop Ruby on Rails dia 2 ruby-ptPedro Sousa
 
Mini-curso RubyOnRails CESOL
Mini-curso RubyOnRails CESOLMini-curso RubyOnRails CESOL
Mini-curso RubyOnRails CESOLtarginosilveira
 
Desenvolvimento de sistemas web com php Frameworks - Aula 1
Desenvolvimento de sistemas web com php Frameworks - Aula 1Desenvolvimento de sistemas web com php Frameworks - Aula 1
Desenvolvimento de sistemas web com php Frameworks - Aula 1Thyago Maia
 
Ruby on Rails: um estudo de viabilidade em ambientes empresariais
Ruby on Rails: um estudo de viabilidade em ambientes empresariaisRuby on Rails: um estudo de viabilidade em ambientes empresariais
Ruby on Rails: um estudo de viabilidade em ambientes empresariaisRodrigo Recio
 
Curso de Ruby on Rails - Aula 02
Curso de Ruby on Rails - Aula 02Curso de Ruby on Rails - Aula 02
Curso de Ruby on Rails - Aula 02Maurício Linhares
 
Curso de Ruby on Rails - Aula 03
Curso de Ruby on Rails - Aula 03Curso de Ruby on Rails - Aula 03
Curso de Ruby on Rails - Aula 03Maurício Linhares
 
Symfony Live - São Paulo 2019 - Como construir uma API em um passo com API Pl...
Symfony Live - São Paulo 2019 - Como construir uma API em um passo com API Pl...Symfony Live - São Paulo 2019 - Como construir uma API em um passo com API Pl...
Symfony Live - São Paulo 2019 - Como construir uma API em um passo com API Pl...BrunoSouza617
 
Desenvolvimento Web com Simfony Framework.
Desenvolvimento Web com Simfony Framework.Desenvolvimento Web com Simfony Framework.
Desenvolvimento Web com Simfony Framework.Vinícius de Paula
 
Java Web Dev Introdução
Java Web Dev IntroduçãoJava Web Dev Introdução
Java Web Dev IntroduçãoMarcio Marinho
 
Cakephp - framework de desenvolvimento de aplicações Web em PHP
Cakephp - framework de desenvolvimento de aplicações Web em PHPCakephp - framework de desenvolvimento de aplicações Web em PHP
Cakephp - framework de desenvolvimento de aplicações Web em PHPArlindo Santos
 
Desenvolvimento web com .NET Core - Meetup São Carlos
Desenvolvimento web com .NET Core - Meetup São CarlosDesenvolvimento web com .NET Core - Meetup São Carlos
Desenvolvimento web com .NET Core - Meetup São CarlosRodolfo Fadino Junior
 

Semelhante a Aprendendo Rails (20)

Introdução Ruby 1.8.7 + Rails 3
Introdução Ruby 1.8.7 + Rails 3Introdução Ruby 1.8.7 + Rails 3
Introdução Ruby 1.8.7 + Rails 3
 
Oficial
OficialOficial
Oficial
 
ASP.NET MVC - Alexandre Tarifa
ASP.NET MVC - Alexandre TarifaASP.NET MVC - Alexandre Tarifa
ASP.NET MVC - Alexandre Tarifa
 
ASP.NET MVC
ASP.NET MVCASP.NET MVC
ASP.NET MVC
 
ApresentaçãO Mvc
ApresentaçãO MvcApresentaçãO Mvc
ApresentaçãO Mvc
 
Apresentação M V C
Apresentação M V CApresentação M V C
Apresentação M V C
 
Workshop Ruby on Rails dia 2 ruby-pt
Workshop Ruby on Rails dia 2  ruby-ptWorkshop Ruby on Rails dia 2  ruby-pt
Workshop Ruby on Rails dia 2 ruby-pt
 
Mini-curso RubyOnRails CESOL
Mini-curso RubyOnRails CESOLMini-curso RubyOnRails CESOL
Mini-curso RubyOnRails CESOL
 
Desenvolvimento de sistemas web com php Frameworks - Aula 1
Desenvolvimento de sistemas web com php Frameworks - Aula 1Desenvolvimento de sistemas web com php Frameworks - Aula 1
Desenvolvimento de sistemas web com php Frameworks - Aula 1
 
Ruby on Rails: um estudo de viabilidade em ambientes empresariais
Ruby on Rails: um estudo de viabilidade em ambientes empresariaisRuby on Rails: um estudo de viabilidade em ambientes empresariais
Ruby on Rails: um estudo de viabilidade em ambientes empresariais
 
Curso de Ruby on Rails - Aula 02
Curso de Ruby on Rails - Aula 02Curso de Ruby on Rails - Aula 02
Curso de Ruby on Rails - Aula 02
 
Ruby & Rails
Ruby & RailsRuby & Rails
Ruby & Rails
 
Palestra
PalestraPalestra
Palestra
 
Curso de Ruby on Rails - Aula 03
Curso de Ruby on Rails - Aula 03Curso de Ruby on Rails - Aula 03
Curso de Ruby on Rails - Aula 03
 
Symfony Live - São Paulo 2019 - Como construir uma API em um passo com API Pl...
Symfony Live - São Paulo 2019 - Como construir uma API em um passo com API Pl...Symfony Live - São Paulo 2019 - Como construir uma API em um passo com API Pl...
Symfony Live - São Paulo 2019 - Como construir uma API em um passo com API Pl...
 
Desenvolvimento Web com Simfony Framework.
Desenvolvimento Web com Simfony Framework.Desenvolvimento Web com Simfony Framework.
Desenvolvimento Web com Simfony Framework.
 
Java Web Dev Introdução
Java Web Dev IntroduçãoJava Web Dev Introdução
Java Web Dev Introdução
 
Cakephp - framework de desenvolvimento de aplicações Web em PHP
Cakephp - framework de desenvolvimento de aplicações Web em PHPCakephp - framework de desenvolvimento de aplicações Web em PHP
Cakephp - framework de desenvolvimento de aplicações Web em PHP
 
Palestra ASP.NET MVC
Palestra ASP.NET MVCPalestra ASP.NET MVC
Palestra ASP.NET MVC
 
Desenvolvimento web com .NET Core - Meetup São Carlos
Desenvolvimento web com .NET Core - Meetup São CarlosDesenvolvimento web com .NET Core - Meetup São Carlos
Desenvolvimento web com .NET Core - Meetup São Carlos
 

Mais de Maurício Linhares

Unindo Ruby e Java através de uma arquitetura orientada a serviços na OfficeDrop
Unindo Ruby e Java através de uma arquitetura orientada a serviços na OfficeDropUnindo Ruby e Java através de uma arquitetura orientada a serviços na OfficeDrop
Unindo Ruby e Java através de uma arquitetura orientada a serviços na OfficeDropMaurício Linhares
 
Mixing Ruby and Java in a Service Oriented Architecture at OfficeDrop
Mixing Ruby and Java in a Service Oriented Architecture at OfficeDropMixing Ruby and Java in a Service Oriented Architecture at OfficeDrop
Mixing Ruby and Java in a Service Oriented Architecture at OfficeDropMaurício Linhares
 
Curso java 08 - mais sobre coleções
Curso java   08 - mais sobre coleçõesCurso java   08 - mais sobre coleções
Curso java 08 - mais sobre coleçõesMaurício Linhares
 
Curso java 06 - mais construtores, interfaces e polimorfismo
Curso java   06 - mais construtores, interfaces e polimorfismoCurso java   06 - mais construtores, interfaces e polimorfismo
Curso java 06 - mais construtores, interfaces e polimorfismoMaurício Linhares
 
Curso java 05 - herança, classes e métodos abstratos
Curso java   05 - herança, classes e métodos abstratosCurso java   05 - herança, classes e métodos abstratos
Curso java 05 - herança, classes e métodos abstratosMaurício Linhares
 
Curso java 04 - ap is e bibliotecas
Curso java   04 - ap is e bibliotecasCurso java   04 - ap is e bibliotecas
Curso java 04 - ap is e bibliotecasMaurício Linhares
 
Curso java 01 - molhando os pés com java
Curso java   01 - molhando os pés com javaCurso java   01 - molhando os pés com java
Curso java 01 - molhando os pés com javaMaurício Linhares
 
Curso java 03 - métodos e parâmetros
Curso java   03 - métodos e parâmetrosCurso java   03 - métodos e parâmetros
Curso java 03 - métodos e parâmetrosMaurício Linhares
 
Outsourcing e trabalho remoto para a nuvem
Outsourcing e trabalho remoto para a nuvemOutsourcing e trabalho remoto para a nuvem
Outsourcing e trabalho remoto para a nuvemMaurício Linhares
 
Aulas de Java Avançado 2- Faculdade iDez 2010
Aulas de Java Avançado 2- Faculdade iDez 2010Aulas de Java Avançado 2- Faculdade iDez 2010
Aulas de Java Avançado 2- Faculdade iDez 2010Maurício Linhares
 

Mais de Maurício Linhares (20)

Mercado de TI
Mercado de TIMercado de TI
Mercado de TI
 
Unindo Ruby e Java através de uma arquitetura orientada a serviços na OfficeDrop
Unindo Ruby e Java através de uma arquitetura orientada a serviços na OfficeDropUnindo Ruby e Java através de uma arquitetura orientada a serviços na OfficeDrop
Unindo Ruby e Java através de uma arquitetura orientada a serviços na OfficeDrop
 
Mixing Ruby and Java in a Service Oriented Architecture at OfficeDrop
Mixing Ruby and Java in a Service Oriented Architecture at OfficeDropMixing Ruby and Java in a Service Oriented Architecture at OfficeDrop
Mixing Ruby and Java in a Service Oriented Architecture at OfficeDrop
 
Aprendendo ruby
Aprendendo rubyAprendendo ruby
Aprendendo ruby
 
Curso java 07 - exceções
Curso java   07 - exceçõesCurso java   07 - exceções
Curso java 07 - exceções
 
Curso java 08 - mais sobre coleções
Curso java   08 - mais sobre coleçõesCurso java   08 - mais sobre coleções
Curso java 08 - mais sobre coleções
 
Curso java 06 - mais construtores, interfaces e polimorfismo
Curso java   06 - mais construtores, interfaces e polimorfismoCurso java   06 - mais construtores, interfaces e polimorfismo
Curso java 06 - mais construtores, interfaces e polimorfismo
 
Curso java 05 - herança, classes e métodos abstratos
Curso java   05 - herança, classes e métodos abstratosCurso java   05 - herança, classes e métodos abstratos
Curso java 05 - herança, classes e métodos abstratos
 
Curso java 04 - ap is e bibliotecas
Curso java   04 - ap is e bibliotecasCurso java   04 - ap is e bibliotecas
Curso java 04 - ap is e bibliotecas
 
Curso java 01 - molhando os pés com java
Curso java   01 - molhando os pés com javaCurso java   01 - molhando os pés com java
Curso java 01 - molhando os pés com java
 
Curso java 02 - variáveis
Curso java   02 - variáveisCurso java   02 - variáveis
Curso java 02 - variáveis
 
Curso java 03 - métodos e parâmetros
Curso java   03 - métodos e parâmetrosCurso java   03 - métodos e parâmetros
Curso java 03 - métodos e parâmetros
 
Extreme programming
Extreme programmingExtreme programming
Extreme programming
 
Feature Driven Development
Feature Driven DevelopmentFeature Driven Development
Feature Driven Development
 
Migrando pra Scala
Migrando pra ScalaMigrando pra Scala
Migrando pra Scala
 
Outsourcing e trabalho remoto para a nuvem
Outsourcing e trabalho remoto para a nuvemOutsourcing e trabalho remoto para a nuvem
Outsourcing e trabalho remoto para a nuvem
 
Mercado hoje
Mercado hojeMercado hoje
Mercado hoje
 
Análise de sistemas oo 1
Análise de sistemas oo   1Análise de sistemas oo   1
Análise de sistemas oo 1
 
Revisão html e java script
Revisão html e java scriptRevisão html e java script
Revisão html e java script
 
Aulas de Java Avançado 2- Faculdade iDez 2010
Aulas de Java Avançado 2- Faculdade iDez 2010Aulas de Java Avançado 2- Faculdade iDez 2010
Aulas de Java Avançado 2- Faculdade iDez 2010
 

Aprendendo Rails

  • 1. Aprendendo Ruby on Rails – Aula 1 Maurício Linhares
  • 2. Por que Rails? }  Escrito em Ruby (sim, isso é uma vantagem); }  Baseado em necessidades reais, não em um comitê (JSF, estou olhando pra você); }  Convenção e padrões em vez de configuração; }  Respostas rápidas a alterações feitas em código;
  • 3. Por que Rails? }  Desenvolvido de forma aberta com uma licença permissiva e business friendly (MIT); }  Comunidade ativa e focada em desenvolvimento web que já produziu plugins e integrações com várias ferramentas comuns; }  Vários livros, muita documentação disponível de forma gratuita e aparição massiva em eventos de desenvolvimento;
  • 4. De onde vem o Rails? }  David Heinemeier Hanson; }  37 Signals; }  Basecamp; }  Foi lançado em julho de 2004 e a equipe de desenvolvimento começou a ser formada em fevereiro de 2005;
  • 5. Estrutura do framework ActiveSupport ActiveRecord ActionPack ActionView
  • 6. ActiveSupport }  Contém classes utilitárias genéricas que são utilizadas por todo o framework e aplicações escritas com ele; }  Adiciona novas funcionalidades a classes padrão do Ruby, como Array e Hash; }  É dependência obrigatória de qualquer aplicação Rails;
  • 7. ActiveRecord }  Biblioteca de mapeamento objeto/relacional padrão do Rails; }  Faz a ponte entre o banco de dados relacional e os objetos que permeiam a aplicação; }  Contém a implementação das Migrations que são a forma evolutiva de tratar os bancos de dados trazida pelo Rails;
  • 8. ActionPack e ActionView }  Fazem a ponte entre o navegador web e o código da aplicação; }  O ActionPack faz a recepção e tratamento de requisições vindas dos clientes, incluindo controle de sessão e autenticação de clientes; }  O ActionView contém as classes utilizadas para gerar saída para os clientes da aplicação web;
  • 9. MVC - Arquitetura de aplicações Rails Model - ActiveRecord View - Controller - ActionView ActionController
  • 10. Workflow comum }  O Controler recebe uma requisição; }  Transforma os dados da requisição e os repassa para o Model; }  Recebe os resultados do Model e os repassa para a View;
  • 11. Controller }  Rotear requisições para os componentes corretos; }  Transformar os dados da requisição em uma forma aceitável para o modelo; }  Chamar o modelo para executar a lógica nos dados já tratados; }  Entregar o resultado da lógica do modelo para a camada de visualização;
  • 12. Model }  O coração da aplicação, onde vive toda lógica de negócio da mesma; }  Pode ou não ser representado por objetos ActiveRecord e se comunicar com o banco de dados; }  Também podem ser serviços, objetos que encapsulam uma lógica complexa de negócio ou que falam com outros sistemas;
  • 13. View }  Apresenta as informações para o cliente, que pode ser um usuário real ou ainda outro sistema; }  Não pode conter lógica de negócio, deve apenas mostrar a informação e ter código relacionado a apresentação dos dados; }  Deve sempre receber os dados prontos do Controller;
  • 14. MVC no Rails } app/ } controllers } helpers } models } Views } assets
  • 15. Helpers? }  São objetos que servem pra ajudar a visualização a mostrar dados para os clientes; }  Em vez de se utilizar de tags especiais ou poluir a página HTML com código Ruby, ele deve viver nas classes Helper; }  Devem ser utilizadas somente para código relacionado a apresentação de informação;
  • 16. Criando o produto }  rails generate migration criar_produtos
  • 17. Escrevendo a migração class CriarProdutos < ActiveRecord::Migration def self.up create_table :produtos do |t| t.string :nome, :null => false t.text :descricao t.decimal :preco, :precision => 10, :scale => 2, :null => false t.timestamps end end def self.down drop_table :produtos end end
  • 18. Tipos disponíveis nas migrações
  • 19. Mais parâmetros em um migration }  :null – indica se pode ser null ou não (true-false) }  :limit – indica o tamanho máximo do campo }  :default – indica o valor padrão do campo }  :precision – indica a precisão do número }  :scale – indica a escala do número (quantas casas depois da vírgula)
  • 20. Criando o banco e executando a migração }  rake db:create }  rake db:migrate
  • 21. Criando o modelo em app/models/ produto.rb class Produto < ActiveRecord::Base validates_presence_of :nome, :preco validates_numericality_of :preco, :greater_than => 0, :allow_nil => true end
  • 22. ActiveRecord::Base }  Todas as classes que acessam o banco de dados devem herdar de ActiveRecord::Base ou de um dos seus descendentes; }  Cada uma das classes deve representar uma tabela no banco de dados; }  Dentro dessa classe ficam definidas as validações e associações com outros objetos;
  • 23. Criando o controlador – app/controllers/ produtos_controller.rb class ProdutosController < ApplicationController def index @produtos = Produto.all respond_to do |format| format.html format.xml do render :xml => @produtos end end end end
  • 24. Criando um controller }  Todos os controllers da aplicação devem herdar de ApplicationController ou de um dos seus descendentes; }  Produto.all retorna todos os objetos da tabela “produtos”; }  Com o uso de respond_to é possível usar um mesmo código e retornar formatos diferentes;
  • 25. Roteando requisições para o lugar certo – config/routes.rb resources :produtos root :to => ’produtos#index'
  • 26. Definições }  root - mapeia a rota raiz da aplicação “/” – é necessário remover o arquivo “public/index.html” }  match – mapeia uma URL para uma ação ou controller, aceita os parâmetros especiais: }  :controller }  :action }  :format }  Além da possibilidade de se definir os seus próprios parâmetros }  match “produtos/:action/:id” => “produtos#:action”
  • 27. map.resources – REST - Representational State Transfer }  HTTP é um protocolo de troca de documentos ou recursos; }  Os recursos são identificados através de URLs; }  Uma aplicação web é um conjunto navegável de recursos;
  • 28. rake:routes produtos GET /produtos(.:format) {:action=>"index", :controller=>"produtos"} POST /produtos(.:format) {:action=>"create", :controller=>"produtos"} new_produto GET /produtos/new(.:format) {:action=>"new", :controller=>"produtos"} edit_produto GET /produtos/:id/edit(.:format) {:action=>"edit", :controller=>"produtos"} produto GET /produtos/:id(.:format) {:action=>"show", :controller=>"produtos"} PUT /produtos/:id(.:format) {:action=>"update", :controller=>"produtos"} DELETE /produtos/:id(.:format) {:action=>"destroy", :controller=>"produtos“}
  • 29. Os métodos HTTP mais comuns }  GET – “pegar” um documento }  POST – enviar dados para o servidor }  DELETE – apagar um documento no servidor }  PUT – atualizar um documento no servidor
  • 30. Idempotência }  Alguns métodos HTTP podem ser chamados várias vezes para o mesmo recurso sem causar efeitos colaterais ou recebendo sempre a mesma resposta – GET, PUT, DELETE; }  O Método POST não é idempotente, cada chamada vai causar um efeito diferente no servidor e as respostas não vão necessariamente ser as mesmas;
  • 31. Layout base da aplicação – app/views/ layouts/application.html.erb }  É a estrutura base onde as outras páginas da aplicação vão ser inseridas; }  Cada aplicação pode ter mais do que um arquivo de layout, o uso ou não do layout depende da configuração na hora que a página está sendo gerada;
  • 32. Arquivos .html.erb }  São arquivos que vão conter marcação HTML comum e também código Ruby; }  Todas as variáveis de instância que estavam no controller, ficam disponíveis na página; }  Para entrar em um bloco de código Ruby, basta fazer <% %>; }  Para gerar texto dentro da página, basta fazer <%= %>;