Ruby on Rails na prática




             Túlio Ornelas
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
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/
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
Um pouco sobre Ruby
• Interpretando um arquivo




• Interpretando diretamente um comando
Um pouco sobre Ruby
• Em Ruby tudo é OO
Um pouco sobre Ruby
• Criando uma classe
   Em Ruby:




   Em Java:
Um pouco sobre Ruby
• Criando um objeto:
   Ruby:




   Java:




  Note a sintaxe simplificada! Não é necessário
  declarar, a variável é criada quando utilizada.
Um pouco sobre Ruby
• Criando uma classe com método e
  construtor:
   Ruby                   Java
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.
Um pouco sobre Ruby
• Métodos
   De instância:




   Da classe:




   Privados e Protegidos:
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
Um pouco sobre Ruby
            • Reestruturando
              nossa classe
              User
Um pouco sobre Ruby
• Herança
Um pouco sobre Ruby
• Testando a herança
Um pouco sobre Ruby
• Booleans

   As únicas coisas falsas em Ruby são nil e false
Um pouco sobre Ruby
Um pouco sobre Ruby
• LAB
   Dado um número imprimir todos os ímpares
    até ele
Um pouco sobre Ruby
• Solução
Quer aprender mais?




http://www.pragprog.com/
O que é o Rails?
• Meta-Framework MVC
• Desenvolvido em linguagem Ruby
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
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
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
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.
Rails - instalando
• Verificando a instalação
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
Rails – criando o projeto
• Vamos criar o projeto bug_tracking
Rails – criando o projeto
• Vamos subir o servidor com ruby script/server e entrar
  na URL http://localhost:3000
Rails – criando o projeto
• Note que nosso projeto não tem nada.
  Vejamos as configurações do nosso
  ambiente:
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)
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
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
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
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.
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
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.
Rails – primeiro C.R.U.D
• Saída do db:migrate
Rails – primeiro C.R.U.D
• Acesse a URL http://localhost:3000/projects
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
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
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
Rails – primeiro C.R.U.D
• A migration de projeto está em:



• Código:
• 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
Rails – primeiro C.R.U.D
• Código do controlador
• Método index
Rails – 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 ...
Rails – Active Record
• Mais métodos
   update_attributes(hash)
   destroy
   find_by_sql(string)
Rails – Active Record
• 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 – primeiro C.R.U.D




• Params é um hash do Rails que possui todos os
  atributos do request. :id é o identificador do
  atributo id.
Rails – primeiro C.R.U.D
Rails – primeiro C.R.U.D
Rails
• O flash é um hash que é apagado na
  próxima requisição, por isso ele é muito
  útil em guardar mensagens de sucesso,
  erro, etc.
Rails – primeiro C.R.U.D
Rails – primeiro C.R.U.D
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
• 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
Rails – primeiro C.R.U.D
• Projects.html.erb
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.
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
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
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
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
Rails – primeiro C.R.U.D
• Vejamos o novo código do modelo:
Rails – primeiro C.R.U.D
Dúvidas




          ?
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
Rails – segundo C.R.U.D
• Vamos adicionar uma validação na
  migration criada
Rails – segundo C.R.U.D
• Com as modificações feitas vamos
  atualizar o banco

            rake db:migrate
Rails – segundo C.R.U.D
• Agora vamos relacionar projeto a bug
• Um projeto poderá ter muitos bugs
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
Rails – segundo C.R.U.D
• Podemos pedir ao rake para nos informar
  todas as rotas possíveis com o comando:
                rake routes
Rails – segundo C.R.U.D
• Vamos adicionar o link de “novo bug” em
  projeto/show.html.erb
Rails – segundo C.R.U.D
• Vamos corrigir bug/new.html.erb para que
  esse realmente aponte para o projeto
Rails – segundo C.R.U.D
• Depois de criado o bug vamos
  redirecionar para página do projeto
Rails – segundo C.R.U.D
• Resultado
 http://localhost:3000/projetos/1
 http://localhost:3000/projetos/1/bugs/new
Rails – segundo C.R.U.D
• Vamos melhorar a apresentação do
  projeto exibindo os bugs, adicione na
  página projeto/show.html.erb
Rails – segundo C.R.U.D
• Resultado
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
Rails – segundo C.R.U.D
• config/routes.rb
Rails – segundo C.R.U.D
  http://localhost:3000/
Quer aprender mais?




http://www.pragprog.com/
http://www.urubatan.com.br/
Ruby on Rails na prática

     Obrigado
ornelas.tulio@gmail.com
twitter.com/tulios

Rails na pratica

  • 1.
    Ruby on Railsna prática Túlio Ornelas
  • 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 sobreRuby • 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 sobreRuby • 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 sobreRuby • Interpretando um arquivo • Interpretando diretamente um comando
  • 7.
    Um pouco sobreRuby • Em Ruby tudo é OO
  • 8.
    Um pouco sobreRuby • Criando uma classe  Em Ruby:  Em Java:
  • 9.
    Um pouco sobreRuby • Criando um objeto:  Ruby:  Java: Note a sintaxe simplificada! Não é necessário declarar, a variável é criada quando utilizada.
  • 10.
    Um pouco sobreRuby • Criando uma classe com método e construtor:  Ruby Java
  • 11.
    Um pouco sobreRuby • 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 sobreRuby • Métodos  De instância:  Da classe:  Privados e Protegidos:
  • 13.
    Um pouco sobreRuby • 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
  • 14.
    Um pouco sobreRuby • Reestruturando nossa classe User
  • 15.
    Um pouco sobreRuby • Herança
  • 16.
    Um pouco sobreRuby • Testando a herança
  • 17.
    Um pouco sobreRuby • Booleans  As únicas coisas falsas em Ruby são nil e false
  • 18.
  • 19.
    Um pouco sobreRuby • LAB  Dado um número imprimir todos os ímpares até ele
  • 20.
    Um pouco sobreRuby • Solução
  • 21.
  • 22.
    O que éo Rails? • Meta-Framework MVC • Desenvolvido em linguagem Ruby
  • 23.
    Rails • Lançado emjulho 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.
  • 27.
    Rails - instalando •Verificando a instalação
  • 28.
    Rails – criandoo 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 – criandoo projeto • Vamos criar o projeto bug_tracking
  • 30.
    Rails – criandoo projeto • Vamos subir o servidor com ruby script/server e entrar na URL http://localhost:3000
  • 31.
    Rails – criandoo projeto • Note que nosso projeto não tem nada. Vejamos as configurações do nosso ambiente:
  • 32.
    Rails – oprojeto • 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õesdo 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 decontinuar 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 dobanco 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 – primeiroC.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 – primeiroC.R.U.D • Saída do scaffold: Migrations (migrações) são um forma de evoluir o schema do banco de dados
  • 38.
    Rails – primeiroC.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.
  • 39.
    Rails – primeiroC.R.U.D • Saída do db:migrate
  • 40.
    Rails – primeiroC.R.U.D • Acesse a URL http://localhost:3000/projects
  • 41.
    Rails – primeiroC.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 – primeiroC.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 – primeiroC.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 – primeiroC.R.U.D • A migration de projeto está em: • Código:
  • 45.
    • Código domodelo 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
  • 46.
    Rails – primeiroC.R.U.D • Código do controlador • Método index
  • 47.
    Rails – ActiveRecord • 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 ...
  • 48.
    Rails – ActiveRecord • Mais métodos  update_attributes(hash)  destroy  find_by_sql(string)
  • 49.
    Rails – ActiveRecord • 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
  • 50.
    Rails – primeiroC.R.U.D • Params é um hash do Rails que possui todos os atributos do request. :id é o identificador do atributo id.
  • 51.
  • 52.
  • 53.
    Rails • O flashé um hash que é apagado na próxima requisição, por isso ele é muito útil em guardar mensagens de sucesso, erro, etc.
  • 54.
  • 55.
  • 56.
    Rails • O Railscria 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 comoas 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
  • 58.
    Rails – primeiroC.R.U.D • Projects.html.erb
  • 59.
    Rails • Onde ficamos 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 – primeiroC.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 (rakeroutes)  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 – primeiroC.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 – primeiroC.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
  • 64.
    Rails – primeiroC.R.U.D • Vejamos o novo código do modelo:
  • 65.
  • 66.
  • 67.
    Rails – segundoC.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 – segundoC.R.U.D • Vamos adicionar uma validação na migration criada
  • 69.
    Rails – segundoC.R.U.D • Com as modificações feitas vamos atualizar o banco rake db:migrate
  • 70.
    Rails – segundoC.R.U.D • Agora vamos relacionar projeto a bug • Um projeto poderá ter muitos bugs
  • 71.
    Rails – segundoC.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 – segundoC.R.U.D • Podemos pedir ao rake para nos informar todas as rotas possíveis com o comando: rake routes
  • 73.
    Rails – segundoC.R.U.D • Vamos adicionar o link de “novo bug” em projeto/show.html.erb
  • 74.
    Rails – segundoC.R.U.D • Vamos corrigir bug/new.html.erb para que esse realmente aponte para o projeto
  • 75.
    Rails – segundoC.R.U.D • Depois de criado o bug vamos redirecionar para página do projeto
  • 76.
    Rails – segundoC.R.U.D • Resultado http://localhost:3000/projetos/1 http://localhost:3000/projetos/1/bugs/new
  • 77.
    Rails – segundoC.R.U.D • Vamos melhorar a apresentação do projeto exibindo os bugs, adicione na página projeto/show.html.erb
  • 78.
    Rails – segundoC.R.U.D • Resultado
  • 79.
    Rails – segundoC.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
  • 80.
    Rails – segundoC.R.U.D • config/routes.rb
  • 81.
    Rails – segundoC.R.U.D http://localhost:3000/
  • 82.
  • 83.
    Ruby on Railsna prática Obrigado ornelas.tulio@gmail.com twitter.com/tulios