rails na pratica

83
Ruby on Rails na prática Ruby on Rails na prática Túlio Ornelas Túlio Ornelas

Upload: tulio-ornelas

Post on 19-May-2015

5.644 views

Category:

Technology


1 download

DESCRIPTION

Uma visão geral de Ruby e Rails

TRANSCRIPT

Page 1: Rails na pratica

Ruby on Rails na práticaRuby on Rails na prática

Túlio OrnelasTúlio Ornelas

Page 2: Rails na pratica
Page 3: Rails na pratica

AgendaAgenda

• Ruby• Rails• Instalando o Rails• Criando um projeto• Criando primeiro C.R.U.D• Validando C.R.U.D• Segundo C.R.U.D

Page 4: Rails na pratica

• Criada em 1993 por Yukihiro Matz• Linguagem interpretada• Tipagem dinâmica• Fortemente tipada• Orientada a objetos• Livre• http://www.ruby-lang.org/

Um pouco sobre Um pouco sobre RubyRuby

Page 5: Rails na pratica

Um pouco sobre Um pouco sobre RubyRuby

• 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

Page 6: Rails na pratica

Um pouco sobre Um pouco sobre RubyRuby

• Interpretando um arquivo

• Interpretando diretamente um comando

Page 7: Rails na pratica

Um pouco sobre Um pouco sobre RubyRuby

• Em Ruby tudo é OO

Page 8: Rails na pratica

Um pouco sobre Um pouco sobre RubyRuby

• Criando uma classe Em Ruby:

Em Java:

Page 9: Rails na pratica

• Criando um objeto: Ruby:

Java:

Note a sintaxe simplificada! Não é necessáriodeclarar, a variável é criada quando utilizada.

Um pouco sobre Um pouco sobre RubyRuby

Page 10: Rails na pratica

• Criando uma classe com método e construtor: Ruby Java

Um pouco sobre Um pouco sobre RubyRuby

Page 11: Rails na pratica

• Variáveis: Local:

De instância:

De classe:

Variáveis de classe são comparadas a atributos estáticos (static) em java.

Um pouco sobre Um pouco sobre RubyRuby

Page 12: Rails na pratica

• Métodos De instância:

Da classe:

Privados e Protegidos:

Um pouco sobre Um pouco sobre RubyRuby

Page 13: Rails na pratica

Um pouco sobre Um pouco sobre RubyRuby

• 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

Page 14: Rails na pratica

• Reestruturando nossa classe User

Um pouco sobre Um pouco sobre RubyRuby

Page 15: Rails na pratica

• Herança

Um pouco sobre Um pouco sobre RubyRuby

Page 16: Rails na pratica

• Testando a herança

Um pouco sobre Um pouco sobre RubyRuby

Page 17: Rails na pratica

• Booleans

As únicas coisas falsas em Ruby são nil e false

Um pouco sobre Um pouco sobre RubyRuby

Page 18: Rails na pratica

Um pouco sobre Um pouco sobre RubyRuby

Page 19: Rails na pratica

• LAB Dado um número imprimir todos os ímpares

até ele

Um pouco sobre Um pouco sobre RubyRuby

Page 20: Rails na pratica

• Solução

Um pouco sobre Um pouco sobre RubyRuby

Page 21: Rails na pratica

Quer aprender mais?Quer aprender mais?

http://www.pragprog.com/

Page 22: Rails na pratica

• Meta-Framework MVC• Desenvolvido em linguagem Ruby

O que é o Rails?O que é o Rails?

Page 23: Rails na pratica

• Lançado em julho de 2004

• Solução completa, produtiva com baixa curva de aprendizagem

• Conceitos: DRY (Don’t Repeat yourself) Convention of configuration

RailsRails

Page 24: Rails na pratica

• O Rails é a junção de 5 frameworks, são eles:

Active Record (ORM) Action Pack (MVC) Action Mailer Action Support Action WebServices

Rails - composiçãoRails - composição

Page 25: Rails na pratica

Rails - instalandoRails - 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

Page 26: Rails na pratica

• 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.

Rails - instalandoRails - instalando

Page 27: Rails na pratica

Rails - instalandoRails - instalando

• Verificando a instalação

Page 28: Rails na pratica

• 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

Rails – criando o projetoRails – criando o projeto

Page 29: Rails na pratica

Rails – criando o projetoRails – criando o projeto

• Vamos criar o projeto bug_tracking

Page 30: Rails na pratica

• Vamos subir o servidor com ruby script/server e entrar na URL http://localhost:3000

Rails – criando o projetoRails – criando o projeto

Page 31: Rails na pratica

• Note que nosso projeto não tem nada. Vejamos as configurações do nosso ambiente:

Rails – criando o projetoRails – criando o projeto

Page 32: Rails na pratica

• 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)

Rails – o projetoRails – o projeto

Page 33: Rails na pratica

• 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

RailsRails

Page 34: Rails na pratica

• 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

RailsRails

Page 35: Rails na pratica

• 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 eprodução

RailsRails

Page 36: Rails na pratica

• Vamos utilizar o gerador scaffold (andaime) que é um gerador de c.r.u.d

• Note que os atributos do seu modelo são passados para o script, e ele irá gerar uma migrate correspondente.

ruby script/generate scaffold project name:string description:string owner:string

Rails – primeiro C.R.U.DRails – primeiro C.R.U.D

Page 37: Rails na pratica

• Saída do scaffold:

Migrations (migrações) são um forma de evoluir o schema do banco de dados

Rails – primeiro C.R.U.DRails – primeiro C.R.U.D

Page 38: Rails na pratica

• Antes de analisarmos o ocorrido, vamos terminar a criação do nosso modelo.

• Execute os comandos:

Rake db:create:allRake db:migrate

O comando db:migrate irá aplicar asmigrations que ainda não foramaplicadas.

Rails – primeiro C.R.U.DRails – primeiro C.R.U.D

Page 39: Rails na pratica

Rails – primeiro C.R.U.DRails – primeiro C.R.U.D

• Saída do db:migrate

Page 40: Rails na pratica

• Acesse a URL http://localhost:3000/projects

Rails – primeiro C.R.U.DRails – primeiro C.R.U.D

Page 41: Rails na pratica

• Vamos analisar os comandos do rake utilizados:

Esse comando utiliza o rake para criar as tabelas para todos os modelos ainda não criados

Rake db:create:all

Rails – primeiro C.R.U.DRails – primeiro C.R.U.D

Page 42: Rails na pratica

Construídas as tabelas devemos criar as colunas.

As migrations servem para criação incremental dos esquemas do banco de dados dos modelos

Rake db:migrate

Rails – primeiro C.R.U.DRails – primeiro C.R.U.D

Page 43: Rails na pratica

• Vejamos primeiro a migration gerada:

Nome do arquivo:

Número de série composto pela data

Tipo Nome da tabela

Rails – primeiro C.R.U.DRails – primeiro C.R.U.D

20090816190631_create_projects.rb

Page 44: Rails na pratica

• A migration de projeto está em:

• Código:

Rails – primeiro C.R.U.DRails – primeiro C.R.U.D

Page 45: Rails na pratica

• 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

Page 46: Rails na pratica

• Código do controlador• Método index

Rails – primeiro C.R.U.DRails – primeiro C.R.U.D

Page 47: Rails na pratica

Rails – Active RecordRails – Active Record

• Vejamos alguns métodos que nossos modelos herdam de ActiveRecord::Base

• save

• find(id)

• find(:all, :conditions => “”) find(:first, :conditions => “”) find(:last, :conditions => “”) Parâmetros opcionais:

• :join, :order, :limit, :offset, :select, :readonly, :from, :group, :lock ...

Page 48: Rails na pratica

• Mais métodos update_attributes(hash) destroy find_by_sql(string)

Rails – Active RecordRails – Active Record

Page 49: Rails na pratica

• Dinamic finders find_all_by_name_and_age(name, age) find_by_name(name) find_by_age(name) find_all_by_name_or_middle_name(name,

middle_name) etc

Rails – Active RecordRails – Active Record

Page 50: Rails na pratica

• Params é um hash do Rails que possui todos os atributos do request. :id é o identificador do atributo id.

Rails – primeiro C.R.U.DRails – primeiro C.R.U.D

Page 51: Rails na pratica

Rails – primeiro C.R.U.DRails – primeiro C.R.U.D

Page 52: Rails na pratica

Rails – primeiro C.R.U.DRails – primeiro C.R.U.D

Page 53: Rails na pratica

RailsRails

• O flash é um hash que é apagado na próxima requisição, por isso ele é muito útil em guardar mensagens de sucesso, erro, etc.

Page 54: Rails na pratica

Rails – primeiro C.R.U.DRails – primeiro C.R.U.D

Page 55: Rails na pratica

Rails – primeiro C.R.U.DRails – primeiro C.R.U.D

Page 56: Rails na pratica

• 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

• As rotas ficam no arquivo config/routes.rb e são associadas aos controladores assim:

map.connect ':controller/:action/:id' map.connect ':controller/:action/:id.:format'

map.resources :projects

RailsRails

Page 57: Rails na pratica

• Vejamos como as views, telas, são criadas:

Neste caso temos um layoutPara o nosso controlador projects, mas poderiamos ter apenas um layout para aplicação toda:

application.html.erb

Page 58: Rails na pratica

• Projects.html.erb

Rails – primeiro C.R.U.DRails – primeiro C.R.U.D

Page 59: Rails na pratica

RailsRails

• Onde ficam os arquivos css e javascript?

A tag stylesheet_link_tagfacilita o acesso aos arquivos css

Código gerado na execuçãoda aplicação.

Page 60: Rails na pratica

• 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

Rails – primeiro C.R.U.DRails – primeiro C.R.U.D

Page 61: Rails na pratica

RailsRails

• 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

Page 62: Rails na pratica

• New.html.erb e Edit.html.erbO new e o Edit são exatamente iguais, Mudando apenas o nome do botãosubmit. Suas operações são diferenciadas pelo método HTTP utilizado.

Rails – primeiro C.R.U.DRails – primeiro C.R.U.D

Cria um formulário para o objeto informado, gerando a URL dependendo do método HTTP utilizado

Apresenta as mensagens de erro, caso existam

Page 63: Rails na pratica

• 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

Rails – primeiro C.R.U.DRails – primeiro C.R.U.D

Page 64: Rails na pratica

• Vejamos o novo código do modelo:

Rails – primeiro C.R.U.DRails – primeiro C.R.U.D

Page 65: Rails na pratica

Rails – primeiro C.R.U.DRails – primeiro C.R.U.D

Page 66: Rails na pratica

?

DúvidasDúvidas

Page 67: Rails na pratica

• 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

Rails – segundo C.R.U.DRails – segundo C.R.U.D

Page 68: Rails na pratica

• Vamos adicionar uma validação na migration criada

Rails – segundo C.R.U.DRails – segundo C.R.U.D

Page 69: Rails na pratica

• Com as modificações feitas vamos atualizar o banco

rake db:migrate

Rails – segundo C.R.U.DRails – segundo C.R.U.D

Page 70: Rails na pratica

• Agora vamos relacionar projeto a bug• Um projeto poderá ter muitos bugs

Rails – segundo C.R.U.DRails – segundo C.R.U.D

Page 71: Rails na pratica

• 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

Rails – segundo C.R.U.DRails – segundo C.R.U.D

Page 72: Rails na pratica

• Podemos pedir ao rake para nos informar todas as rotas possíveis com o comando:

rake routes

Rails – segundo C.R.U.DRails – segundo C.R.U.D

Page 73: Rails na pratica

• Vamos adicionar o link de “novo bug” em projeto/show.html.erb

Rails – segundo C.R.U.DRails – segundo C.R.U.D

Page 74: Rails na pratica

• Vamos corrigir bug/new.html.erb para que esse realmente aponte para o projeto

Rails – segundo C.R.U.DRails – segundo C.R.U.D

Page 75: Rails na pratica

• Depois de criado o bug vamos redirecionar para página do projeto

Rails – segundo C.R.U.DRails – segundo C.R.U.D

Page 76: Rails na pratica

• Resultadohttp://localhost:3000/projetos/1

http://localhost:3000/projetos/1/bugs/new

Rails – segundo C.R.U.DRails – segundo C.R.U.D

Page 77: Rails na pratica

• Vamos melhorar a apresentação do projeto exibindo os bugs, adicione na página projeto/show.html.erb

Rails – segundo C.R.U.DRails – segundo C.R.U.D

Page 78: Rails na pratica

• Resultado

Rails – segundo C.R.U.DRails – segundo C.R.U.D

Page 79: Rails na pratica

• 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

Rails – segundo C.R.U.DRails – segundo C.R.U.D

Page 80: Rails na pratica

• config/routes.rb

Rails – segundo C.R.U.DRails – segundo C.R.U.D

Page 81: Rails na pratica

http://localhost:3000/

Rails – segundo C.R.U.DRails – segundo C.R.U.D

Page 82: Rails na pratica

Quer aprender mais?Quer aprender mais?

http://www.pragprog.com/http://www.urubatan.com.br/

Page 83: Rails na pratica

Ruby on Rails na práticaRuby on Rails na prática

ObrigadoObrigado

[email protected]@gmail.com

twitter.com/tuliostwitter.com/tulios