SlideShare uma empresa Scribd logo
1 de 62
Baixar para ler offline
Desenvolvimento Web com
      Ruby on Rails



                   Por Júlio Bêtta
Por que Ruby ???
●
    Linguagem dinâmica
●
    Totalmente Orientado a Objetos
●
    Sintaxe flexível
●
    Cross-plataform
    Ruby(C), jRuby(Java), IronRuby(.NET)
●
    Software Livre
●
    Programadores mais felizes =)
Ruby on Rails
Sobre o Ruby on Rails
●   Framework web implementado na linguagem Ruby
●   Desenvolvimento ágil de aplicações web
●   MVC
●   Utiliza o conceito Convention over Configuration (CoC)
●   E muito mais ...
Ruby on Rails


●
    Principais Banco de Dados Suportados
    ●
        SQlite 3 (padrão)
    ●
        MySQL
    ●
        PostgreSQL
    ●
        Oracle
    ●
        Microsoft SQL Server
Ruby on Rails


●
    Instalação
    ●
        Windows:
        http://railsinstaller.org

    ●
        Linux (Ubuntu):
        https://github.com/juliobetta/RoR/tree/master/installation




           Os exemplos a seguir foram testados apenas em ambiente LINUX.
Sintaxe
Sintaxe
●
     IRB
   Programa iniciado na linha de comando que permite a execução de
  comandos em Ruby com responta em tempo-real.




   
  




       Todos os comandos a seguir podem ser testados utilizando o irb.
Sintaxe
●
     Strings
  
     "eu sou uma string"
     'Ruby ' + 'on Rails'




   
  
Sintaxe
●
    Variáveis
    Não é preciso declarar o tipo:
    nome = "Ruby"
    Porém a tipagem no Ruby é forte:
    versao = 3
    nome   = "Rails " + versao (TYPE ERROR)

    versao = 3
    nome   = "Rails " + versao.to_s
    Podemos avaliar expressões dentro de strings com conversão
    automática:
    versao = 3
    nome   = "Ruby" 
    curso  = "#{nome} on Rails #{versao}"
Sintaxe
●
    Operações básicas
    1 + 2   # adição
    4 – 2   # subtração
    2 * 2   # multiplicação
    6 / 2   # divisão
    15 % 2  # modulo

●
    Operadores
    5 == (2+3) # igualdade
    2 != 3     # inigualdade 
    10 > 13    # maior
    3  <  10   # menor
    5  <= 5    # menor ou igual
    5  >= 5    # maior ou igual
Sintaxe
●
     Controles de fluxo
     Maneira usual:

   idade = 15
   if (idade < 16) then
      puts 'que pariu! Você não deveria estar dirigindo.'
   end
  
 
Sintaxe
●
    Controles de fluxo
    Maneira usual um pouco melhor:

   idade = 15
   if idade < 16
      puts 'Você não deveria estar dirigindo.'
   end
  
 
Sintaxe
●
     Controles de fluxo
     Isso é ótimo:

   idade = 15
   puts 'Você não deveria estar dirigindo.' if idade < 16


  
 
Sintaxe
●
     Controles de fluxo
     Algo diferente:

   idade = 15
   unless idade >= 16
      puts 'Você não deveria estar dirigindo.'
   end

     ou:
  
  idade = 15
  puts 'Você não deveria estar dirigindo.' unless idade >= 16
Sintaxe
●
    Controles de fluxo
    Não me esqueci do else:

   idade = 18
   if idade < 16
      puts 'Você não deveria estar dirigindo.'
  
   else
      puts 'Pode seguir!'
   end
  
 
    Famosos operadores ternários:
    idade = 18
    puts idade >= 16 ? 'Pode seguir!':'Vai pra casa!'
Sintaxe
●
     Controles de fluxo
     Loops

      for i in 1..10   5.times do |n|   5.upto(10) do
         puts i           puts n           puts 'Oi!'
      end              end              end
  

   letras = ['a','b','c','d']
   letras.each do |letra|
      puts letra
  end

     i = 0
     while i < 5
        puts i
        i += 1
     end
Sintaxe
●
    Arrays e Hashes
  Arrays
   objetos   = ['carro','bicicleta','pizza']
   objetos   = %w(teclado mouse livro)
   puts objetos[0]

   Hash
   atributos = {:nome      => 'Yukihiro',
 
                :sobrenome => 'Matsumoto',
                :email     => 'matz@ruby.co.jp'}
   puts atributos[:nome]
Sintaxe
●
    Ruby :symbols
    São cadeias de caracteres usualmente utilizados como identificadores.
    Eles são como strings , porém reusam o mesmo espaço de memória.
    Vejamos:
    "carro".object_id
   => 2953810
   "carro".object_id
   => 2951340

    :carro.object_id
   => 166418
   :carro.object_id
  => 166418
Sintaxe
●
     Métodos (funções)
     def diga_adeus_para(nome, sobrenome)
        "Adeus #{nome} #{sobrenome}..."
     end
  
     puts diga_adeus_para("Yukihiro", "Matsumoto")

  
  Como parênteses neste caso são opcionais, soa mais natural como:

     puts diga_adeus_para "Yukihiro", "Matsumoto"
Sintaxe
●
    Classes
    A maneira mais longa:             … e a mais curta:
    class Pessoa                      class Pessoa
       @nome                             attr_accessor :nome,
       @sobrenome                                      :sobrenome
                                      end
       def nome                                  Define getters e setters
         @nome
       end

       def sobrenome                  class Pessoa
         @sobrenome                      attr_reader :nome,
       end                                           :sobrenome
                                      end
          def nome=(nome)                        Define somente getters
            @nome = nome
          end                         class Pessoa
                                         attr_writer :nome,
          def sobrenome=(sobrenome)                  :sobrenome
            @sobrenome = sobrenome    end
          end
    end                                          Define somente setters
Sintaxe
●
     Classes
     Criar novas instância com o método .new
   matz = Pessoa.new
   matz.nome      = "Yukihiro" 
   matz.sobrenome = "Matsumoto"
   puts matz.nome
   puts matz.sobrenome

  
 
Sintaxe
●
    Classes
    Herança
   class Usuario < Pessoa
      attr_accessor :nome_usuario,
                    :senha
   end

   matz = Usuario.new
   matz.nome         = "Yukihiro" 
   matz.sobrenome    = "Matsumoto"
 
   matz.nome_usuario = "matz"
   matz.senha        = "abc123"
Sintaxe
●
     Classes
     As classes são abertas:
   class Pessoa
     def initialize(nome, sobrenome)
        @nome      = nome
        @sobrenome = sobrenome 
     end

    def to_s
      "#{@nome} #{@sobrenome}"
 
    end
  end

     matz = Pessoa.new "Yukihiro", "Matsumoto"
     puts matz
Mão na massa !!!
Mão na massa


●
    Switter
    ●
        Aplicação similar a uma seção do famoso microblog
    ●
        Exibir usuários e microposts (sweets)

         Entidades
Mão na massa


●
    Switter
    $ rails new switter

     Estrutura de diretórios gerada
     automaticamente
Mão na massa


●
    Switter




              Organiza a aplicação em
                  componentes
Mão na massa


●
    Switter




     Configuração da aplicação   Arquivos estáticos
Mão na massa


●
    Página Inicial
    Criando um Controller:


    No terminal:

    $ rails generate controller paginas inicio
Mão na massa


●
    Página Inicial
    $ rails generate controller paginas inicio

     Arquivos gerados automaticamente
     na pasta app
Mão na massa


●
    Página Inicial
    Criando uma Action no Controller que acabamos de gerar:
    app/views/paginas/inicio.html.erb

    <h2>Seja bem­vindo ao Switter!!!</h2>

    app/controllers/paginas_controller.rb
    class PaginasController < ApplicationController
       def inicio
          render 'paginas/inicio'
       end
    end
Mão na massa


●
    Layout padrão
    ●
        Contém a estrutura HTML da aplicação;
    ●
        A ideia é que as views geradas nos controllers sejam incluídas
        neste arquivo, através do método yield.
    app/views/layouts/application.html.erb
    <!DOCTYPE html>
    <html>
    <head>
      <title>Switter</title>
      <%= stylesheet_link_tag    "application" %>
      <%= javascript_include_tag "application" %>
      <%= csrf_meta_tags %>
    </head>
    <body>
    <%= yield %>
    </body>
    </html>
Mão na massa


●
    Rotas
    Sistema que examina a URL solicitada e determina qual ação deve
    deve ser executada pela aplicação.


    config/routes.rb

    Switter::Application.routes.draw do
       get 'paginas/inicio'
    end
Mão na massa


●
    Inicialização
    Rails já possui um webserver embutido:

    $ rails server
Mão na massa


●
    Scaffolding
    ●
        Criar model, controller e views para criar, exibir, atualizar e
        deletar (CRUD) o recurso que especificarmos
    ●
        Também é responsável por criar as tabelas do banco de dados


    $ rails generate scaffold usuario nome:string 
      email:string

    $ rails generate scaffold micropost
      usuario_id:integer conteudo:string 
Mão na massa


●
    Scaffolding

    Estrutura gerada na pasta app
Mão na massa


●
    Scaffolding
    Rotas geradas
    config/routes.rb
    Switter::Application.routes.draw do
      get 'paginas/inicio'
      resources :usuarios
      resources :microposts
    end
Mão na massa


●
    Migrations




    $ rake db:migrate
Mão na massa


●
    Rake
    ●
        Executar tarefas
    ●
        Funciona como o Make, Ant, etc...
    ●
        Utilizado para gerenciar banco de dados, rodar testes, e o que
        mais for preciso
    ●
        Executar tarefas personalizadas



      $ rake ­­tasks
Mão na massa


●
    Scaffolding
Mão na massa


●
    Scaffolding
Mão na massa


●
    Scaffolding é bom porque...
    ●
        É rapido
    ●
        Mostra como o Rails funciona
    ●
        Usa padrões que usaremos no dia-a-dia
Mão na massa


●
    Scaffolding é ruim porque...
    ●
        O código não é otimizado
    ●
        Pode adicionar mais código do que venhamos precisar
    ●
        É muito simplório (uma tabela, sem possibilidades de gerar
        relacionamentos automaticamente)




         Profissionais da área não utilizam esta técnica em ambiente de produção.
Mão na massa


●
    ActiveRecord
    ●
        Biblioteca ORM que encapsula as tabelas do banco de dados
        como objetos
    ●
        Utiliza o poder do Ruby de gerar código (metaprogramação)
Mão na massa


●
     ActiveRecord Interativo
     Os exemplos a seguir podem ser testados por meio do rails console, que
    pode ser executado de duas maneiras:



     $ rails console


     $ rails console ­­sandbox

     Com o parâmetro sandbox ativado, toda mudança no banco de dados será
    desfeita após a saída do console.


                                  * utilizar o comando exit para sair do console.
Mão na massa


●
    ActiveRecord Interativo
    Criar um usuário:

     matz=Usuario.new({:nome  => 'Yukihiro',
                       :email => 'matz@ruby.co.jp'})
     matz.save

    Selecionar usuário:
     matz = Usuario.where({:nome => 'Yukihiro'})
    Alterar usuário:
     matz.nome = 'Yukihiro Matsumoto'
     matz.save
    Deletar usuário:
     Usuario.find(1).destroy
Mão na massa


●
     Relacionamento
    Como vimos no início, um usuário possui vários microposts e um
    micropost pertence a apenas um usuário.
         Entidades
Mão na massa


●
    Relacionamento
    app/models/usuario.rb

    class Usuario < ActiveRecord::Base
       has_many :microposts
    end


    app/models/micropost.rb

    class Micropost < ActiveRecord::Base
       belongs_to :usuario
    end

    Com isso, é gerado, via metaprogramação, o método usuario na instância da
    classe Micropost e o método microposts na instância da classe Usuario.
Mão na massa


●
    Relacionamento (console)
    Listar todos os microposts de um determinado usuário:
     # seleciona o último usuario inserido no BD
     usuario = Usuario.last
     # e atribui a variavel todos seus microposts
     microposts = usuario.microposts 

    Cria um micropost e o atribui a um usuário:
    matz = Usuario.where :nome => 'Yukihiro Matsumoto'
    micropost = Micropost.new
    micropost.conteudo = 'Eu sou o criador do Ruby!'
    micropost.usuario = matz
    micropost.save
    # imprime Yukihiro Matsumoto
    puts micropost.usuario.nome 
Mão na massa


●
    Relacionamento (views)
    app/views/microposts/index.html.erb gerado pelo scaffold.

    ...
    <tr>
        <td><%= micropost.usuario_id %></td>
        <td><%= micropost.conteudo %></td>
    ...

    app/views/microposts/index.html.erb modificado.

    ...
    <tr>
        <td><%= micropost.usuario.nome %></td>
        <td><%= micropost.conteudo %></td>
    ...
Mão na massa


●
    Relacionamento (views)
Mão na massa


●
    Relacionamento (views)
    app/views/microposts/_form.html.erb gerado pelo scaffold.

    ...
     <div class="field">
        <%= f.label :usuario_id %><br />
        <%= f.text_field :usuario_id %>
    ...

    app/views/microposts/_form.html.erb modificado.
    ...
     <div class="field">
        <%= f.label :usuario_id %><br />
        <%= f.collection_select :usuario_id, 
             Usuario.all, :id, :nome  %>
    ...
Mão na massa


●
    Relacionamento (views)
Mão na massa


●
    Validações
    app/models/usuario.rb

    class Usuario < ActiveRecord::Base
       has_many :microposts, :dependent => :destroy
       validates_presence_of   :nome, :email
       validates_uniqueness_of :email
    end
Mão na massa


●
    Validações
Mão na massa


●
    Validações
    app/models/micropost.rb

    class Micropost < ActiveRecord::Base
       belongs_to :usuario
       validates_presence_of :conteudo
       validates_length_of    :conteudo, :maximum => 140
    end
                              OU

    class Micropost < ActiveRecord::Base
       belongs_to :usuario
       validates :conteudo, 
                 :presence => true,
                 :length => {:maximum => 140}
    end
Mão na massa


●
    Validações
Mão na massa


●
    Gems
    ●
        Gerenciador de pacotes do Ruby
    ●
        Facilita distribuicão de códigos
    ●
        Age como o apt-get (derivados do Debian)
    ●
        No Rails as gems podem ser adicionadas no arquivo Gemfile
O que vimos até agora
●   Brevemente aspectos principais da sintaxe Ruby
●   Principais características do Rails
●   Como criar uma aplicacão
●   Criar controller e actions
●   Layouts
●   Scaffolding
●   Active Record
●   Validacões
●   Gems
Próximos passos
●
    Aprender mais!
    ●
        www.ruby-br.org
    ●
        www.rubyonrails.com.br
    ●
        www.akitaonrails.com
    ●
        www.ruby.railstutorial.org/ruby-on-rails-tutorial-book
        (em inglês)
PERGUNTAS ???
●
    Podem me escrever diretamente
    ●
        juliobetta@gmail.com

Mais conteúdo relacionado

Mais procurados (9)

Curso javascript básico
Curso javascript básicoCurso javascript básico
Curso javascript básico
 
Curso Ruby
Curso RubyCurso Ruby
Curso Ruby
 
Introdução a Linguagem de Programação Ruby
Introdução a Linguagem de Programação RubyIntrodução a Linguagem de Programação Ruby
Introdução a Linguagem de Programação Ruby
 
Ruby (1)
Ruby (1)Ruby (1)
Ruby (1)
 
Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011
 
Palestra Desenvolvimento Ágil para Web com ROR UVA
Palestra Desenvolvimento Ágil para Web com ROR UVAPalestra Desenvolvimento Ágil para Web com ROR UVA
Palestra Desenvolvimento Ágil para Web com ROR UVA
 
JavaScript "for dummies"
JavaScript "for dummies"JavaScript "for dummies"
JavaScript "for dummies"
 
Php, eu escolho você! @ UFJF
Php, eu escolho você! @ UFJFPhp, eu escolho você! @ UFJF
Php, eu escolho você! @ UFJF
 
Ruby on rails gds 2011
Ruby on rails   gds 2011Ruby on rails   gds 2011
Ruby on rails gds 2011
 

Destaque

#003 drill press
#003 drill press#003 drill press
#003 drill press
physics101
 
Como Ruby on Rails pode o tornar um programador pior
Como Ruby on Rails pode o tornar um programador piorComo Ruby on Rails pode o tornar um programador pior
Como Ruby on Rails pode o tornar um programador pior
Carlos Brando
 
Desenvolvimento web com Ruby on Rails (parte 1)
Desenvolvimento web com Ruby on Rails (parte 1)Desenvolvimento web com Ruby on Rails (parte 1)
Desenvolvimento web com Ruby on Rails (parte 1)
Joao Lucas Santana
 

Destaque (16)

Ruby No Desktop - Marcelo Castellani
Ruby No Desktop - Marcelo CastellaniRuby No Desktop - Marcelo Castellani
Ruby No Desktop - Marcelo Castellani
 
Programador (front|back) end moderno, por Leonardo Hackin
Programador (front|back) end moderno, por Leonardo HackinProgramador (front|back) end moderno, por Leonardo Hackin
Programador (front|back) end moderno, por Leonardo Hackin
 
Продавачът на конци
Продавачът на конциПродавачът на конци
Продавачът на конци
 
Estoy desesperado
Estoy desesperadoEstoy desesperado
Estoy desesperado
 
Bazar de Artesanato na AEAK
Bazar de Artesanato na AEAKBazar de Artesanato na AEAK
Bazar de Artesanato na AEAK
 
Economia
EconomiaEconomia
Economia
 
Orla6º
Orla6ºOrla6º
Orla6º
 
Apresentação2
Apresentação2Apresentação2
Apresentação2
 
#003 drill press
#003 drill press#003 drill press
#003 drill press
 
Como Ruby on Rails pode o tornar um programador pior
Como Ruby on Rails pode o tornar um programador piorComo Ruby on Rails pode o tornar um programador pior
Como Ruby on Rails pode o tornar um programador pior
 
[RS on Rails 2013] Construa um produto. Quando? Neste final de semana.
[RS on Rails 2013] Construa um produto. Quando? Neste final de semana.[RS on Rails 2013] Construa um produto. Quando? Neste final de semana.
[RS on Rails 2013] Construa um produto. Quando? Neste final de semana.
 
Introdução à programação em Ruby
Introdução à programação em RubyIntrodução à programação em Ruby
Introdução à programação em Ruby
 
Desenvolvimento Web com RubyOnRails
Desenvolvimento Web com RubyOnRailsDesenvolvimento Web com RubyOnRails
Desenvolvimento Web com RubyOnRails
 
Desenvolvimento web com Ruby on Rails (parte 1)
Desenvolvimento web com Ruby on Rails (parte 1)Desenvolvimento web com Ruby on Rails (parte 1)
Desenvolvimento web com Ruby on Rails (parte 1)
 
SEA Rails na pratica
SEA Rails na praticaSEA Rails na pratica
SEA Rails na pratica
 
Rails na pratica
Rails na praticaRails na pratica
Rails na pratica
 

Semelhante a Ruby on Rails (VERSAO COM LAYOUT CONSERTADO)

Linguagens de Script: Caso de Estudo Lua
Linguagens de Script: Caso de Estudo LuaLinguagens de Script: Caso de Estudo Lua
Linguagens de Script: Caso de Estudo Lua
Sérgio Souza Costa
 
Curso de introdução ao ruby
Curso de introdução ao rubyCurso de introdução ao ruby
Curso de introdução ao ruby
Francis Wagner
 
Programacao de macros_com_libre_office_basic_slideshare
Programacao de macros_com_libre_office_basic_slideshareProgramacao de macros_com_libre_office_basic_slideshare
Programacao de macros_com_libre_office_basic_slideshare
Marcio Junior Vieira
 

Semelhante a Ruby on Rails (VERSAO COM LAYOUT CONSERTADO) (20)

Introdução ao Desenvolvimento WEB com Ruby on Rails
Introdução ao Desenvolvimento WEB com Ruby on RailsIntrodução ao Desenvolvimento WEB com Ruby on Rails
Introdução ao Desenvolvimento WEB com Ruby on Rails
 
Minicurso Ruby on Rails
Minicurso Ruby on RailsMinicurso Ruby on Rails
Minicurso Ruby on Rails
 
Ruby & Rails
Ruby & RailsRuby & Rails
Ruby & Rails
 
Aula01
Aula01Aula01
Aula01
 
Minicurso de Rails - WTISC 2014
Minicurso de Rails - WTISC 2014Minicurso de Rails - WTISC 2014
Minicurso de Rails - WTISC 2014
 
Removendo o cheiro ruim do seu código - PHPSC Conf 2011
Removendo o cheiro ruim do seu código - PHPSC Conf 2011Removendo o cheiro ruim do seu código - PHPSC Conf 2011
Removendo o cheiro ruim do seu código - PHPSC Conf 2011
 
Esta começando a programar para a web? Então começe com Rails
Esta começando a programar para a web? Então começe com RailsEsta começando a programar para a web? Então começe com Rails
Esta começando a programar para a web? Então começe com Rails
 
Linguagens de Script: Caso de Estudo Lua
Linguagens de Script: Caso de Estudo LuaLinguagens de Script: Caso de Estudo Lua
Linguagens de Script: Caso de Estudo Lua
 
Palestra Ruby
Palestra RubyPalestra Ruby
Palestra Ruby
 
Curso de introdução ao ruby
Curso de introdução ao rubyCurso de introdução ao ruby
Curso de introdução ao ruby
 
Curso JavaScript - Aula de Introdução como Programar
Curso JavaScript - Aula de Introdução como ProgramarCurso JavaScript - Aula de Introdução como Programar
Curso JavaScript - Aula de Introdução como Programar
 
Palestra cbq
Palestra cbqPalestra cbq
Palestra cbq
 
Ruby, Rails e Diversão (Campus Party Brasil 2009)
Ruby, Rails e Diversão (Campus Party Brasil 2009)Ruby, Rails e Diversão (Campus Party Brasil 2009)
Ruby, Rails e Diversão (Campus Party Brasil 2009)
 
Conceitos base de programação - parte 1
Conceitos base de programação - parte 1Conceitos base de programação - parte 1
Conceitos base de programação - parte 1
 
Ruby On Rails Regis
Ruby On Rails RegisRuby On Rails Regis
Ruby On Rails Regis
 
(Re)pensando a OOP - TDC 2012
(Re)pensando a OOP - TDC 2012(Re)pensando a OOP - TDC 2012
(Re)pensando a OOP - TDC 2012
 
Shell script
Shell script Shell script
Shell script
 
Removendo o cheiro ruim do seu código - SoLiSC 2011
Removendo o cheiro ruim do seu código - SoLiSC 2011Removendo o cheiro ruim do seu código - SoLiSC 2011
Removendo o cheiro ruim do seu código - SoLiSC 2011
 
Programacao de macros_com_libre_office_basic_slideshare
Programacao de macros_com_libre_office_basic_slideshareProgramacao de macros_com_libre_office_basic_slideshare
Programacao de macros_com_libre_office_basic_slideshare
 
Programação de Macros com LibreOffice Basic
Programação de Macros com LibreOffice BasicProgramação de Macros com LibreOffice Basic
Programação de Macros com LibreOffice Basic
 

Ruby on Rails (VERSAO COM LAYOUT CONSERTADO)

  • 1. Desenvolvimento Web com Ruby on Rails Por Júlio Bêtta
  • 2. Por que Ruby ??? ● Linguagem dinâmica ● Totalmente Orientado a Objetos ● Sintaxe flexível ● Cross-plataform Ruby(C), jRuby(Java), IronRuby(.NET) ● Software Livre ● Programadores mais felizes =)
  • 4. Sobre o Ruby on Rails ● Framework web implementado na linguagem Ruby ● Desenvolvimento ágil de aplicações web ● MVC ● Utiliza o conceito Convention over Configuration (CoC) ● E muito mais ...
  • 5. Ruby on Rails ● Principais Banco de Dados Suportados ● SQlite 3 (padrão) ● MySQL ● PostgreSQL ● Oracle ● Microsoft SQL Server
  • 6. Ruby on Rails ● Instalação ● Windows: http://railsinstaller.org ● Linux (Ubuntu): https://github.com/juliobetta/RoR/tree/master/installation Os exemplos a seguir foram testados apenas em ambiente LINUX.
  • 8. Sintaxe ● IRB    Programa iniciado na linha de comando que permite a execução de comandos em Ruby com responta em tempo-real.        Todos os comandos a seguir podem ser testados utilizando o irb.
  • 9. Sintaxe ● Strings    "eu sou uma string" 'Ruby ' + 'on Rails'       
  • 10. Sintaxe ● Variáveis Não é preciso declarar o tipo: nome = "Ruby" Porém a tipagem no Ruby é forte: versao = 3 nome   = "Rails " + versao (TYPE ERROR) versao = 3 nome   = "Rails " + versao.to_s Podemos avaliar expressões dentro de strings com conversão automática: versao = 3 nome   = "Ruby"  curso  = "#{nome} on Rails #{versao}"
  • 11. Sintaxe ● Operações básicas 1 + 2   # adição 4 – 2   # subtração 2 * 2   # multiplicação 6 / 2   # divisão 15 % 2  # modulo ● Operadores 5 == (2+3) # igualdade 2 != 3     # inigualdade  10 > 13    # maior 3  <  10   # menor 5  <= 5    # menor ou igual 5  >= 5    # maior ou igual
  • 12. Sintaxe ● Controles de fluxo Maneira usual: idade = 15    if (idade < 16) then    puts 'que pariu! Você não deveria estar dirigindo.' end     
  • 13. Sintaxe ● Controles de fluxo Maneira usual um pouco melhor: idade = 15    if idade < 16    puts 'Você não deveria estar dirigindo.' end     
  • 14. Sintaxe ● Controles de fluxo Isso é ótimo: idade = 15    puts 'Você não deveria estar dirigindo.' if idade < 16     
  • 15. Sintaxe ● Controles de fluxo Algo diferente: idade = 15 unless idade >= 16    puts 'Você não deveria estar dirigindo.'    end ou:      idade = 15 puts 'Você não deveria estar dirigindo.' unless idade >= 16
  • 16. Sintaxe ● Controles de fluxo Não me esqueci do else: idade = 18 if idade < 16    puts 'Você não deveria estar dirigindo.'    else    puts 'Pode seguir!' end      Famosos operadores ternários: idade = 18 puts idade >= 16 ? 'Pode seguir!':'Vai pra casa!'
  • 17. Sintaxe ● Controles de fluxo Loops for i in 1..10 5.times do |n| 5.upto(10) do puts i puts n puts 'Oi!' end end end    letras = ['a','b','c','d']    letras.each do |letra| puts letra   end i = 0 while i < 5 puts i i += 1 end
  • 18. Sintaxe ● Arrays e Hashes Arrays objetos   = ['carro','bicicleta','pizza']    objetos   = %w(teclado mouse livro) puts objetos[0]    Hash atributos = {:nome      => 'Yukihiro',                :sobrenome => 'Matsumoto',              :email     => 'matz@ruby.co.jp'} puts atributos[:nome]
  • 19. Sintaxe ● Ruby :symbols São cadeias de caracteres usualmente utilizados como identificadores. Eles são como strings , porém reusam o mesmo espaço de memória. Vejamos: "carro".object_id => 2953810 "carro".object_id    => 2951340 :carro.object_id    => 166418 :carro.object_id   => 166418
  • 20. Sintaxe ● Métodos (funções) def diga_adeus_para(nome, sobrenome)    "Adeus #{nome} #{sobrenome}..." end    puts diga_adeus_para("Yukihiro", "Matsumoto")      Como parênteses neste caso são opcionais, soa mais natural como: puts diga_adeus_para "Yukihiro", "Matsumoto"
  • 21. Sintaxe ● Classes A maneira mais longa: … e a mais curta: class Pessoa class Pessoa    @nome    attr_accessor :nome,    @sobrenome     :sobrenome end def nome Define getters e setters          @nome end def sobrenome class Pessoa          @sobrenome    attr_reader :nome, end   :sobrenome   end def nome=(nome) Define somente getters   @nome = nome end class Pessoa    attr_writer :nome, def sobrenome=(sobrenome)   :sobrenome   @sobrenome = sobrenome end end end Define somente setters
  • 22. Sintaxe ● Classes Criar novas instância com o método .new matz = Pessoa.new matz.nome      = "Yukihiro"  matz.sobrenome = "Matsumoto"    puts matz.nome puts matz.sobrenome     
  • 23. Sintaxe ● Classes Herança class Usuario < Pessoa    attr_accessor :nome_usuario,      :senha    end matz = Usuario.new    matz.nome         = "Yukihiro"  matz.sobrenome    = "Matsumoto"   matz.nome_usuario = "matz" matz.senha     = "abc123"
  • 24. Sintaxe ● Classes As classes são abertas: class Pessoa def initialize(nome, sobrenome) @nome   = nome    @sobrenome = sobrenome  end    def to_s "#{@nome} #{@sobrenome}"   end end matz = Pessoa.new "Yukihiro", "Matsumoto" puts matz
  • 26. Mão na massa ● Switter ● Aplicação similar a uma seção do famoso microblog ● Exibir usuários e microposts (sweets) Entidades
  • 27. Mão na massa ● Switter $ rails new switter Estrutura de diretórios gerada automaticamente
  • 28. Mão na massa ● Switter Organiza a aplicação em componentes
  • 29. Mão na massa ● Switter Configuração da aplicação Arquivos estáticos
  • 30. Mão na massa ● Página Inicial Criando um Controller: No terminal: $ rails generate controller paginas inicio
  • 31. Mão na massa ● Página Inicial $ rails generate controller paginas inicio Arquivos gerados automaticamente na pasta app
  • 32. Mão na massa ● Página Inicial Criando uma Action no Controller que acabamos de gerar: app/views/paginas/inicio.html.erb <h2>Seja bem­vindo ao Switter!!!</h2> app/controllers/paginas_controller.rb class PaginasController < ApplicationController def inicio render 'paginas/inicio' end end
  • 33. Mão na massa ● Layout padrão ● Contém a estrutura HTML da aplicação; ● A ideia é que as views geradas nos controllers sejam incluídas neste arquivo, através do método yield. app/views/layouts/application.html.erb <!DOCTYPE html> <html> <head>   <title>Switter</title>   <%= stylesheet_link_tag    "application" %>   <%= javascript_include_tag "application" %>   <%= csrf_meta_tags %> </head> <body> <%= yield %> </body> </html>
  • 34. Mão na massa ● Rotas Sistema que examina a URL solicitada e determina qual ação deve deve ser executada pela aplicação. config/routes.rb Switter::Application.routes.draw do    get 'paginas/inicio' end
  • 35. Mão na massa ● Inicialização Rails já possui um webserver embutido: $ rails server
  • 36. Mão na massa ● Scaffolding ● Criar model, controller e views para criar, exibir, atualizar e deletar (CRUD) o recurso que especificarmos ● Também é responsável por criar as tabelas do banco de dados $ rails generate scaffold usuario nome:string    email:string $ rails generate scaffold micropost   usuario_id:integer conteudo:string 
  • 37. Mão na massa ● Scaffolding Estrutura gerada na pasta app
  • 38. Mão na massa ● Scaffolding Rotas geradas config/routes.rb Switter::Application.routes.draw do   get 'paginas/inicio'   resources :usuarios   resources :microposts end
  • 39. Mão na massa ● Migrations $ rake db:migrate
  • 40. Mão na massa ● Rake ● Executar tarefas ● Funciona como o Make, Ant, etc... ● Utilizado para gerenciar banco de dados, rodar testes, e o que mais for preciso ● Executar tarefas personalizadas   $ rake ­­tasks
  • 41. Mão na massa ● Scaffolding
  • 42. Mão na massa ● Scaffolding
  • 43. Mão na massa ● Scaffolding é bom porque... ● É rapido ● Mostra como o Rails funciona ● Usa padrões que usaremos no dia-a-dia
  • 44. Mão na massa ● Scaffolding é ruim porque... ● O código não é otimizado ● Pode adicionar mais código do que venhamos precisar ● É muito simplório (uma tabela, sem possibilidades de gerar relacionamentos automaticamente) Profissionais da área não utilizam esta técnica em ambiente de produção.
  • 45. Mão na massa ● ActiveRecord ● Biblioteca ORM que encapsula as tabelas do banco de dados como objetos ● Utiliza o poder do Ruby de gerar código (metaprogramação)
  • 46. Mão na massa ● ActiveRecord Interativo Os exemplos a seguir podem ser testados por meio do rails console, que pode ser executado de duas maneiras: $ rails console $ rails console ­­sandbox Com o parâmetro sandbox ativado, toda mudança no banco de dados será desfeita após a saída do console. * utilizar o comando exit para sair do console.
  • 47. Mão na massa ● ActiveRecord Interativo Criar um usuário:  matz=Usuario.new({:nome  => 'Yukihiro',    :email => 'matz@ruby.co.jp'})  matz.save Selecionar usuário:  matz = Usuario.where({:nome => 'Yukihiro'}) Alterar usuário:  matz.nome = 'Yukihiro Matsumoto'  matz.save Deletar usuário:  Usuario.find(1).destroy
  • 48. Mão na massa ● Relacionamento Como vimos no início, um usuário possui vários microposts e um micropost pertence a apenas um usuário. Entidades
  • 49. Mão na massa ● Relacionamento app/models/usuario.rb class Usuario < ActiveRecord::Base has_many :microposts end app/models/micropost.rb class Micropost < ActiveRecord::Base belongs_to :usuario end Com isso, é gerado, via metaprogramação, o método usuario na instância da classe Micropost e o método microposts na instância da classe Usuario.
  • 50. Mão na massa ● Relacionamento (console) Listar todos os microposts de um determinado usuário:  # seleciona o último usuario inserido no BD  usuario = Usuario.last  # e atribui a variavel todos seus microposts  microposts = usuario.microposts  Cria um micropost e o atribui a um usuário: matz = Usuario.where :nome => 'Yukihiro Matsumoto' micropost = Micropost.new micropost.conteudo = 'Eu sou o criador do Ruby!' micropost.usuario = matz micropost.save # imprime Yukihiro Matsumoto puts micropost.usuario.nome 
  • 51. Mão na massa ● Relacionamento (views) app/views/microposts/index.html.erb gerado pelo scaffold. ... <tr>     <td><%= micropost.usuario_id %></td>     <td><%= micropost.conteudo %></td> ... app/views/microposts/index.html.erb modificado. ... <tr>     <td><%= micropost.usuario.nome %></td>     <td><%= micropost.conteudo %></td> ...
  • 52. Mão na massa ● Relacionamento (views)
  • 53. Mão na massa ● Relacionamento (views) app/views/microposts/_form.html.erb gerado pelo scaffold. ...  <div class="field">     <%= f.label :usuario_id %><br />     <%= f.text_field :usuario_id %> ... app/views/microposts/_form.html.erb modificado. ...  <div class="field">     <%= f.label :usuario_id %><br />     <%= f.collection_select :usuario_id,     Usuario.all, :id, :nome  %> ...
  • 54. Mão na massa ● Relacionamento (views)
  • 55. Mão na massa ● Validações app/models/usuario.rb class Usuario < ActiveRecord::Base has_many :microposts, :dependent => :destroy validates_presence_of   :nome, :email validates_uniqueness_of :email end
  • 56. Mão na massa ● Validações
  • 57. Mão na massa ● Validações app/models/micropost.rb class Micropost < ActiveRecord::Base belongs_to :usuario validates_presence_of :conteudo validates_length_of  :conteudo, :maximum => 140 end OU class Micropost < ActiveRecord::Base belongs_to :usuario validates :conteudo,    :presence => true,   :length => {:maximum => 140} end
  • 58. Mão na massa ● Validações
  • 59. Mão na massa ● Gems ● Gerenciador de pacotes do Ruby ● Facilita distribuicão de códigos ● Age como o apt-get (derivados do Debian) ● No Rails as gems podem ser adicionadas no arquivo Gemfile
  • 60. O que vimos até agora ● Brevemente aspectos principais da sintaxe Ruby ● Principais características do Rails ● Como criar uma aplicacão ● Criar controller e actions ● Layouts ● Scaffolding ● Active Record ● Validacões ● Gems
  • 61. Próximos passos ● Aprender mais! ● www.ruby-br.org ● www.rubyonrails.com.br ● www.akitaonrails.com ● www.ruby.railstutorial.org/ruby-on-rails-tutorial-book (em inglês)
  • 62. PERGUNTAS ??? ● Podem me escrever diretamente ● juliobetta@gmail.com