3. Agenda
• Ruby
• Rails
• Instalando o Rails
• Criando um projeto
• Criando primeiro C.R.U.D
• Validando C.R.U.D
• Segundo C.R.U.D
4. Um pouco sobre Ruby
• Criada em 1993 por Yukihiro Matz
• Linguagem interpretada
• Tipagem dinâmica
• Fortemente tipada
• Orientada a objetos
• Livre
• http://www.ruby-lang.org/
5. Um pouco sobre Ruby
• Instalando
Linux: sudo apt-get install ruby
Windows: One-click-installer
• http://www.ruby-lang.org/pt/downloads/
Mac OS/X: port install ruby
• Testando a instalação
ruby -v
Irb -v
6. Um pouco sobre Ruby
• Interpretando um arquivo
• Interpretando diretamente um comando
8. Um pouco sobre Ruby
• Criando uma classe
Em Ruby:
Em Java:
9. Um pouco sobre Ruby
• Criando um objeto:
Ruby:
Java:
Note a sintaxe simplificada! Não é necessário
declarar, a variável é criada quando utilizada.
10. Um pouco sobre Ruby
• Criando uma classe com método e
construtor:
Ruby Java
11. Um pouco sobre Ruby
• Variáveis:
Local:
De instância:
De classe:
Variáveis de classe são comparadas a atributos
estáticos (static) em java.
12. Um pouco sobre Ruby
• Métodos
De instância:
Da classe:
Privados e Protegidos:
13. Um pouco sobre Ruby
• Criando métodos de acesso as variáveis
• attr_accessor e attr_reader são métodos
que geram os métodos get/set
dinamicamente
22. O que é o Rails?
• Meta-Framework MVC
• Desenvolvido em linguagem Ruby
23. Rails
• Lançado em julho de 2004
• Solução completa, produtiva com baixa
curva de aprendizagem
• Conceitos:
DRY (Don’t Repeat yourself)
Convention of configuration
24. Rails - composição
• O Rails é a junção de 5 frameworks, são
eles:
Active Record (ORM)
Action Pack (MVC)
Action Mailer
Action Support
Action WebServices
25. Rails - instalando
• O Rails é uma rubygem, por isso precisamos
do gem corretamente instalado.
• Uma “gem” é código ruby empacotado. Pode
ser comparado ao .jar em Java.
• Rubygems é instalado junto com o ruby,
caso contrário: sudo apt-get install rubygems
26. Rails - instalando
• Dependências:
libsqlite3-dev
ruby1.8-dev
• Abra o console e digite:
gem install sqlite3-ruby (driver)
gem install rails
*Confirme a instalação das dependências quando solicitado.
28. Rails – criando o projeto
• Para criar um projeto utilize o comando:
Rails <nome do projeto>
• Por exemplo:
Rails bug_tracking
• Dessa forma o rails Irá gerar o arcabouço
de um projeto MVC
29. Rails – criando o projeto
• Vamos criar o projeto bug_tracking
30. Rails – criando o projeto
• Vamos subir o servidor com ruby script/server e entrar
na URL http://localhost:3000
31. Rails – criando o projeto
• Note que nosso projeto não tem nada.
Vejamos as configurações do nosso
ambiente:
32. Rails – o projeto
• Analisaremos apenas o diretório app por
enquanto
• Controllers => Diretório com os controladores da
aplicação
• Models => Os modelos do seu domínio
• Views => As telas
• Helpers => Classes de ajuda (conversão,
etc)
33. Rails
• Scripts padrões do Rails, vejamos dois:
Generate => Cria uma estrutura básica para
um modelo.
Server => Inicia o servidor da aplicação.
• Modo de usar:
Ruby script/generate <parâmetros>
Ruby script/server
34. Rails
• Antes de continuar o desenvolvimento
devemos conhecer o rake
Um utilitário Ruby semelhante ao make
do C/C++, ou Ant no Java.
Exemplo:
• Rake db:create:all
35. Rails
• Configuração do banco em
config/database.yml
O banco padrão do Rails é o
SQLite3 que é um banco de
dados embarcado
São criados 3 contextos:
desenvolvimento, teste e
produção
36. Rails – primeiro C.R.U.D
• Vamos utilizar o gerador scaffold
(andaime) que é um gerador de c.r.u.d
ruby script/generate scaffold project name:string
description:string owner:string
• Note que os atributos do seu modelo são
passados para o script, e ele irá gerar
uma migrate correspondente.
37. Rails – primeiro C.R.U.D
• Saída do scaffold:
Migrations (migrações) são um forma de evoluir o
schema do banco de dados
38. Rails – primeiro C.R.U.D
• Antes de analisarmos o ocorrido, vamos
terminar a criação do nosso modelo.
• Execute os comandos:
Rake db:create:all O comando db:migrate irá aplicar as
migrations que ainda não foram
Rake db:migrate aplicadas.
40. Rails – primeiro C.R.U.D
• Acesse a URL http://localhost:3000/projects
41. Rails – primeiro C.R.U.D
• Vamos analisar os comandos do rake
utilizados:
Rake db:create:all
Esse comando utiliza o rake para criar as
tabelas para todos os modelos ainda não
criados
42. Rails – primeiro C.R.U.D
Rake db:migrate
Construídas as tabelas devemos criar as
colunas.
As migrations servem para criação
incremental dos esquemas do banco de
dados dos modelos
43. Rails – primeiro C.R.U.D
• Vejamos primeiro a migration gerada:
Nome do arquivo:
Número de série composto pela data
20090816190631_create_projects.rb
Tipo Nome da tabela
44. Rails – primeiro C.R.U.D
• A migration de projeto está em:
• Código:
45. • Código do modelo e do helper:
• Estão vazios pois ainda não possuem
nenhuma regra de negócio!
• As colunas do banco serão injetadas pelo
ActiveRecord como atributos no modelo
56. Rails
• O Rails cria um controlador para o modelo com
URL’s rest, como pode ser observado
• Essas url’s são criadas através de rotas
map.connect ':controller/:action/:id'
map.connect ':controller/:action/:id.:format'
• As rotas ficam no arquivo config/routes.rb e são
associadas aos controladores assim:
map.resources :projects
57. • Vejamos como as views, telas, são
criadas:
Neste caso temos um layout
Para o nosso controlador
projects, mas poderiamos ter
apenas um layout para
aplicação toda:
application.html.erb
59. Rails
• Onde ficam os arquivos css e javascript?
A tag stylesheet_link_tag
facilita o acesso aos arquivos css
Código gerado na execução
da aplicação.
60. Rails – primeiro C.R.U.D
• Index.html.erb
A tag <% é utilizada para executar algum comando
ruby e <%= para escapar algum valor. *H é uma
função de um helper, serve para não escapar o html
61. Rails
• Rotas (rake routes)
projects_path listagem
project para o show (detalhamento)
new_project_path página de criação
edit_project_path(project) página de edição
62. Rails – primeiro C.R.U.D
• New.html.erb e Edit.html.erb
O new e o Edit são exatamente iguais,
Mudando apenas o nome do botão
submit. Suas operações são diferenciadas
pelo método HTTP utilizado.
Cria um formulário para o objeto informado,
gerando a URL dependendo do método
HTTP utilizado
Apresenta as mensagens de erro,
caso existam
63. Rails – primeiro C.R.U.D
• Nosso modelo ainda não implementa
nenhuma regra de negócio, vamos
incrementar:
Para isso vamos utilizar os métodos
validates_
Iremos validar o nome, que deve ser único,
obrigatório, maior que cinco (5), menor que
cinqüenta (50) e o responsável é obrigatório
67. Rails – segundo C.R.U.D
• Vamos criar um novo modelo Bug que
possui um projeto
• Vamos atualizar o nosso modelo projeto,
para que este possua vários Bug’s
• Vamos relacionar os controladores
ruby script/generate scaffold bug
project:belongs_to description:string
68. Rails – segundo C.R.U.D
• Vamos adicionar uma validação na
migration criada
69. Rails – segundo C.R.U.D
• Com as modificações feitas vamos
atualizar o banco
rake db:migrate
70. Rails – segundo C.R.U.D
• Agora vamos relacionar projeto a bug
• Um projeto poderá ter muitos bugs
71. Rails – segundo C.R.U.D
• Com os modelos relacionados, vamos
criar rotas relacionadas entre eles
• Para isso vamos editar o arquivo
config/routes.db
• Removi a rota direta para bug
72. Rails – segundo C.R.U.D
• Podemos pedir ao rake para nos informar
todas as rotas possíveis com o comando:
rake routes
73. Rails – segundo C.R.U.D
• Vamos adicionar o link de “novo bug” em
projeto/show.html.erb
74. Rails – segundo C.R.U.D
• Vamos corrigir bug/new.html.erb para que
esse realmente aponte para o projeto
75. Rails – segundo C.R.U.D
• Depois de criado o bug vamos
redirecionar para página do projeto
76. Rails – segundo C.R.U.D
• Resultado
http://localhost:3000/projetos/1
http://localhost:3000/projetos/1/bugs/new
77. Rails – segundo C.R.U.D
• Vamos melhorar a apresentação do
projeto exibindo os bugs, adicione na
página projeto/show.html.erb
79. Rails – segundo C.R.U.D
• Pronto! Agora precisamos apenas
configurar nossa aplicação na página
principal
• Delete a página public/index.html que é a
página de apresentação do projeto
• E faça o mapeamento do controlador
principal no arquivo config/routes.rb