SlideShare a Scribd company logo
1 of 103
Download to read offline
Ruby on Rails na
                    prática



Túlio Ornelas
2
Agenda
•   Sobre o Ruby
•   Como instalar
•   Algumas estruturas da linguagem
•   Sobre o Rails
•   Como instalar
•   Algumas Características do framework
•   Primeiro CRUD
•   Associações
•   Segundo CRUD


                                           3
Um pouco sobre Ruby

•   Criada em 1993 por Yukihiro Matz

•   Linguagem interpretada

•   “Tipagem” dinâmica

•   Orientada a objetos

•   Livre

•   http://www.ruby-lang.org/



                                       4
Um pouco sobre Ruby
• Instalando
 - Linux: sudo apt-get install ruby
 - Windows: One-Click-Installer
       •   http://rubyinstaller.org/download.html

   -   Mac OS X: sudo port install ruby
• Testando a instalação
 -  ruby -v [tulios] ~ ruby -v
            ruby 1.8.7 (2009-06-08 patchlevel 173) [universal-darwin10.0]

 - irb -v irb 0.9.5(05/04/13)
            [tulios] ~ irb -v



                                                                            5
Um pouco sobre Ruby

• Interpretando um comando
 - Interactive Ruby Shell (IRB)
    [tulios] ~ irb
    >> puts "Oi"
    Oi

• Interpretando um arquivo
 - <nome>.rb
   [tulios] ~ ruby file.rb



                                  6
Um pouco sobre Ruby

• Em Ruby tudo é OO
 [tulios] ~ irb
 >> 12.class
 => Fixnum

 >> true.class
 => TrueClass

 >> nil.class
 => NilClass

 >> "Tulio".class
 => String



                      7
Um pouco sobre Ruby
• Booleans
 - As únicas coisas falsas são nil e false
              [tulios] ~ irb          >> if 0
              >> if 12                >> puts
              >> puts "verdadeiro!"   "verdadeiro!"
              >> end                  >> end
              verdadeiro!             verdadeiro!

              >> if nil               >> if false
              >> puts "falso!"        >> puts "falso!"
              >> end                  >> end
                                                         8
Um pouco sobre Ruby
• Variáveis
 - Local           user
 - De instância    @user
 - De classe       @@user
 - Globais         $user
• Variáveis de classe são comparadas a
  atributos estáticos (static) em Java.

                                          9
Um pouco sobre Ruby


• Criando uma classe
 - Em Ruby             Em Java




                                 10
Um pouco sobre Ruby

• Criando um objeto
 - Ruby
 - Java

• Note a sintaxe simplificada, não é
  necessário declarar o tipo da
  variável.
                                      11
Um pouco sobre Ruby
• Criando uma classe com método
 - Ruby         Java




                                  12
Um pouco sobre Ruby

• Utilizando a classe no IRB
 - Importar a classe: require
   [tulios] ~ irb
   >> require 'user'
   => true

   >> user = User.new
   => #<User:0x1011cae60>

   >> user.ola
   => "oi!"



                                13
Um pouco sobre Ruby
• Utilizando construtores
 - Ruby             Java




                            14
Um pouco sobre Ruby
• Analisando
               - Não é necessário
               definir o tipo de retorno

               - Não é necessário
               utilizar parênteses ().


                                          15
Um pouco sobre Ruby
• Construtor e “sobrecarga” do
 construtor




                                 16
Um pouco sobre Ruby
• Métodos
 - De instância

  -   Da classe




                       17
Um pouco sobre Ruby
 • Vamos praticar!
[tulios] ~ irb
>> require 'user'
=> true

>> user = User.new "Tulio"
=> #<User:0x101238410 @nome="Tulio">

>> user.equals? "Karina"
=> false

>> User.compare "Tulio", "Renan"
=> false


                                       18
Um pouco sobre Ruby


    • Todo atributo em Ruby é privado!
?> user.nome
NoMethodError: undefined method `nome' for #<User:0x101238410 @nome="Tulio">
	

  from (irb):6




                                                                              19
Um pouco sobre Ruby
• Métodos de acesso as variáveis




                                   20
Um pouco sobre Ruby

• Vamos testar!
                  [tulios] ~ irb
                  >> require 'user'
                  => true

                  >> user = User.new
                  => #<User:0x1012394a0 @nome="">

                  >> user.nome = "Tulio"
                  => "Tulio"

                  >> user.nome
                  => "Tulio"

                                                    21
Um pouco sobre Ruby

• Como criar o get e o set “na mão”?
 [tulios] ~ irb
 >> require 'user'
 => true

 >> user = User.new
 => #<User:0x1012394a0 @nome="">

 >> user.nome = "Tulio"
 => "Tulio"

 >> user.nome
 => "Tulio"

                                       22
Um pouco sobre Ruby
• Modificadores de acesso
 - Privados e protegidos



 -   Públicos
     •   Modificador padrão, não é necessário explicitar
         (Também podemos utilizar a palavra public)
                                                          23
Um pouco sobre Ruby

• Utilizando a classe em outro .rb
 - Importar a classe: require




                                     24
Um pouco sobre Ruby
• Herança




                      25
Um pouco sobre Ruby
  • Testando
[tulios] ~ irb
>> require 'user'
=> true

>> user = User.new "123456"
=> #<User:0x101230bc0 @idade=0,
@senha="123456", @nome="Vazio">

>> user.nome
=> "Vazio"
>> user.idade
=> 0
>> user.idade = 10
=> 10
>> user.adulto?
=> false

                                  26
Um pouco sobre Ruby
• Testando a herança
  [tulios] ~ irb
  >> require 'user'
  => true

  >> Person.superclass
  => Object

  >> User.superclass
  => Person

  >> User.superclass.superclass
  => Object



                                  27
Um pouco sobre Ruby
• Loops
 - for




                      28
Exercício

• Imprimir os números impares até 10




                                       29
Exercício

• Solução




                        30
Um pouco sobre Ruby
• Outros Loops
 - while




                       31
Um pouco sobre Ruby
• Outros Loops
 - iteradores




                       32
Um pouco sobre Ruby
• Outros Loops
 - métodos da classe Fixnum




                              33
Um pouco sobre Ruby

• Array e Hash




                       34
Um pouco sobre Ruby
• Exceções




                       35
Um pouco sobre Ruby

• Classes abertas
                    [tulios] ~ irb
                    >> require 'arquivo'
                    => true

                    >> 1.impar?
                    => true
                    >> 3.par?
                    => false
                    >> 4.par?
                    => true
                                           36
Quer aprender mais?




http://www.pragprog.com
                             37
O que é o Rails?
• Meta-framework MVC
• Desenvolvido em linguagem Ruby
• Baseado em convenções
• http://guias.rubyonrails.pro.br/


                                     38
Rails

• Lançado em julho de 2004
• Criado por David Heinemeir
  Hansson
• Conceitos
 - DRY (Don’t Repeat Yourself)
 - Convention over Configuration
                                  39
Rails - composição
• O Rails é a junção de 5 frameworks
 - Active Record (ORM)
 - Action Pack (MVC)
 - Action Mailer
 - Active Support
 - Active Resource
 - Action WebServices (1.2.6)
                                       40
Rails - instalando


• O Rails é uma RubyGem
• Uma gem é código ruby
 empacotado
  [tulios] ~ gem -v
  1.3.6




                            41
Rails - instalando


• gem install rails
• Vamos utilizar o SQLite3
 - gem install sqlite3-ruby (driver)


                                       42
Rails - instalando
• Verificando a instalação
[tulios] ~ gem list                                 [tulios] ~ rails -v
                                                    Rails 2.3.5
*** LOCAL GEMS ***
                                                    [tulios] ~ sqlite3 --version
actionmailer (2.3.5, 2.3.3, 2.3.2, 2.2.2, 1.3.6)    3.6.12
actionpack (2.3.5, 2.3.3, 2.3.2, 2.2.2, 1.13.6)
actionwebservice (1.2.6)
activerecord (2.3.5, 2.3.3, 2.3.2, 2.2.2, 1.15.6)
activeresource (2.3.5, 2.3.3, 2.3.2, 2.2.2)
activesupport (2.3.5, 2.3.3, 2.3.2, 2.2.2, 1.4.4)
rack (1.0.0)
rails (2.3.5, 2.3.3, 2.3.2, 2.2.2, 1.2.6)
rake (0.8.7, 0.8.3)
sqlite3-ruby (1.2.5, 1.2.4)

                                                                                   43
Rails - criando o projeto

• Abra o terminal e utilize o comando:
 - rails <nome do projeto>
   [tulios] ~ rails bug_tracking
        create
        create app/controllers
        create app/helpers
        create app/models
        create app/views/layouts
        ...

• O Rails irá gerar o arcabouço de um
  projeto MVC

                                         44
Rails - criando o projeto

• Vamos subir o servidor
 - ruby script/server
     [tulios] ~/exemplo/bug_tracking ruby script/server
     => Booting Mongrel
     => Rails 2.3.4 application starting on http://0.0.0.0:3000
     => Call with -d to detach
     => Ctrl-C to shutdown server


 -   Acessar a URL http://localhost:3000


                                                                  45
Rails - criando o projeto
• Página de início




                            46
Rails - o projeto
• Analisaremos apenas o diretório
  APP, por enquanto
                Controllers
                 - Controladores da aplicação
                Models
                 - Os modelos do seu domínio
                Views
                 - As telas
                Helpers
                 - Classes de ajuda

                                                47
Rails - scripts
• Generate
 - Cria uma estrutura básica para o modelo
• Server
 - Inicia o servidor da aplicação
• Modo de usar:
 - ruby script/generate <parâmetros>
 - ruby script/server <parâmetros>
                                             48
Rake


• Semelhante ao make do C/C++ ou
  Ant do Java
• “A simple ruby build program with capabilities
  similar to make.”
  [tulios] ~ rake --version
  rake, version 0.8.7




                                                   49
Rails - o projeto
• Configuração padrão do banco
 - O banco padrão é o SQLite3, que é um
    banco de dados embarcado




                                          50
Rails - o projeto
• Configuração padrão do banco




                                51
Rails - 1º CRUD

• Vamos utilizar o gerador scaffold
  (andaime)
 -   ruby script/generate scaffold project
     name:string description:text owner:string
 -   Os atributos do modelo são passados no
     script


                                                 52
Rails - 1º CRUD
• Saída do scaffold
  exists app/models/
  exists app/controllers/
  exists app/helpers/
  create app/views/projects
  exists app/views/layouts/
  ...
  create db/migrate
  create db/migrate/20091018202745_create_projects.rb




                                                        53
Rails - 1º CRUD

• Vamos terminar a criação do
 modelo
• Execute os comandos:
 - rake db:create:all
 - rake db:migrate

                                54
Rails - 1º CRUD
• Saída do db:migrate
[tulios] ~ exemplo/bug_tracking rake db:migrate
(in /Users/tulios/Documents/SEA/Palestras/Rails/exemplo/bug_tracking)
== CreateProjects: migrating ==============================
-- create_table(:projects)
   -> 0.0016s
== CreateProjects: migrated (0.0017s) =======================




Migrations (migrações) são uma forma de
evoluir o schema do banco de dados
                                                                        55
Rails - 1º CRUD
• Acesse
 - http://localhost:3000/projects




                                    56
Rails - 1º CRUD
• O que fizemos?
 - db:migrate evoluiu o banco de dados,
    aplicando a migrate criada




                                          57
Rails - 1º CRUD
• Analisando a migration criada
  20091018202745_create_projects.rb


      Data        Tipo    Alvo


2009/10/18 20:27:45
                                      58
Rails - 1º CRUD
• Código da migration




                        59
Rails - 1º CRUD
• Código do modelo



 As colunas do banco serão injetadas
 como atributos pelo Active Record

                                       60
Rails - 1º CRUD
• Active Record
• Vejamos alguns métodos herdados
 - save
 - find(id)
 - find(:all) / (:first) / (:last)
   •   Parâmetros opcionais:
       :conditions, :join, :order, :limit, :offset, :select, :readonly, :from, :group, :lock ...




                                                                                                   61
Rails - 1º CRUD

• Active Record
• Mais métodos...
 - update_attributes(hash)
 - destroy
 - find_by_sql(string)

                             62
Rails - 1º CRUD
• Active Record
• Dinamic finders
 - find_all
 - find_all_by_name(name)
 - find_all_by_name_and_age(name, age)
 - etc
                                        63
Rails - 1º CRUD
• Vamos testar => ruby script/console
[tulios] ~ exemplo/bug_tracking ruby script/console
Loading development environment (Rails 2.3.4)

>> Project.all
=> [#<Project id: 1, name: "Nome do projeto", description: "A descrição do projeto",
owner: "Dono do projeto", created_at: "2009-10-18 22:09:45",
updated_at: "2009-10-18 22:09:45">]

>> Project.find_all_by_name("Nome do projeto")
=> [#<Project id: 1, name: "Nome do projeto", description: "A descrição do projeto",
owner: "Dono do projeto", created_at: "2009-10-18 22:09:45",
updated_at: "2009-10-18 22:09:45">]

>> Project.count
=> 1
                                                                                       64
Rails - 1º CRUD
• Código do controlador (index)




                                  65
Rails - 1º CRUD
• Index no formato xml
• http://localhost:3000/projects.xml




                                       66
Rails - 1º CRUD
• Código do controlador (show)



Params é um hash do Rails que possui
todos os atributos do request. :id é o
identificador do atributo id
                                         67
Rails - 1º CRUD
• Código do controlador (new/edit)




                                     68
Rails - 1º CRUD
• Código do controlador (create)




                                   69
Rails - 1º CRUD

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




                                       70
Rails - 1º CRUD
• Código do controlador (update)




                                   71
Rails - 1º CRUD
• Código do controlador (destroy)




                                    72
Rails - 1º CRUD
• Configuração das rotas




                          73
Rails - 1º CRUD
• Views
              Nesse caso temos um
              layout para o
              controlador projects,
              mas poderiamos ter
              apenas um layout para
              aplicação toda.

               application.html.erb

                                      74
Rails - 1º CRUD
• projects.html.erb




                        75
Rails - 1º CRUD
• Onde ficam os css e javascripts?
             stylesheet_link_tag facilita
             o acesso aos arquivos css


           :defaults carrega todos os arquivos
           javascript padrão do Rails

                                                 76
Rails - 1º CRUD
• index.html.erb




<% para executar algum comando e <%= para
escapar algum valor
                                            77
Rails - 1º CRUD

• Método helper H
  Não permite a execução do html armazenado

• Caso contrário


                                              78
Rails - 1º CRUD
• Resultado
 - Com

 -   Sem




                         79
Rails - 1º CRUD

• Vamos incrementar o modelo
• Vamos utilizar:
 - validates_
• O que vamos validar:
 - nome será obrigatório, maior que 5 e
     menor que 50
 -   responsável será obrigatório
                                          80
Rails - 1º CRUD

• Novo código do modelo




                          81
Rails - 1º CRUD
• Resultado




                       82
Rails - 1º CRUD
• Outros métodos validates_




                              83
Rails - 1º CRUD

• Validação personalizada




                            84
Rails
• Relacionamentos entre tabelas
 - 1 para 1




                                  85
Rails
• Relacionamentos entre tabelas
 - 1 para N




                                  86
Rails
• Relacionamentos entre tabelas
 - N para N




                                  87
Rails - 2º CRUD

• Um Projeto possui vários Bugs
 - ruby script/generate scaffold bug
    project:belongs_to description:text




                                          88
Rails - 2º CRUD
• Vamos validar, para que project
  não seja nulo




                                    89
Rails - 2º CRUD

• Aplicando as mudanças
 - rake db:migrate
 [tulios] ~ exemplo/bug_tracking rake db:migrate
 (in /Users/tulios/Documents/SEA/Palestras/Rails/exemplo/bug_tracking)
 == CreateBugs: migrating ===============================
 -- create_table(:bugs)
    -> 0.0018s
 == CreateBugs: migrated (0.0020s) ========================




                                                                         90
Rails - 2º CRUD

• Um projeto poderá ter vários bugs




                                      91
Rails - 2º CRUD
• Vamos criar rotas relacionadas
 - config/routes.rb
 - A rota direta para bug foi removida


 http://localhost:3000/projects/5/bugs/new

                                             92
Rails - 2º CRUDO


• Podemos pedir para o rake
 informar todas as rotas
 -   rake routes




                              93
Rails - 2º CRUD

• Vamos adicionar o link de novo
  bug em projeto
 -   project/show.html.erb




                                   94
Rails - 2º CRUD

• Vamos corrigir bug/new.html.erb




                                    95
Rails - 2º CRUD
• bugs_path não existe, devemos
 corrigir o link voltar também




                                  96
Rails - 2º CRUD

• Vamos ajustar a criação
 - Método create



                            97
Rails - 2º CRUD
• Resultado
 - http://localhost:3000/projects/5
 - http://localhost:3000/projects/5/bugs/new



                                               98
Rails - 2º CRUD
• Vamos apenas melhorar a
 apresentação
 -   projects/show.html.erb




                              99
Rails - 2º CRUD

• Configurar a página principal
 - apague public/index.html
 - mapeamento no config/routes.rb


                                   100
Que aprender mais?




http://www.pragprog.com
http://www.urubatan.com.br
                             101
102
P&R
http://github.com/tulios
http://twitter.com/tulios
ornelas.tulio@gmail.com

More Related Content

What's hot

Três anos de Scala no NewsMonitor
Três anos de Scala no NewsMonitorTrês anos de Scala no NewsMonitor
Três anos de Scala no NewsMonitorFelipe Hummel
 
Dando os primeiros passos com rails
Dando os primeiros passos com railsDando os primeiros passos com rails
Dando os primeiros passos com railsMarcos Sousa
 
Ruby and Rails intro
Ruby and Rails introRuby and Rails intro
Ruby and Rails introNuno Silva
 
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 UVAThiago Cifani
 
Doctrine 2 camada de persistência para php
Doctrine 2   camada de persistência para phpDoctrine 2   camada de persistência para php
Doctrine 2 camada de persistência para phpFabio B. Silva
 
Apresentação Ruby no Dojo da UFBA
Apresentação Ruby no Dojo da UFBAApresentação Ruby no Dojo da UFBA
Apresentação Ruby no Dojo da UFBALuciano Borges
 

What's hot (7)

Java 9, 10 e ... 11
Java 9, 10 e ... 11Java 9, 10 e ... 11
Java 9, 10 e ... 11
 
Três anos de Scala no NewsMonitor
Três anos de Scala no NewsMonitorTrês anos de Scala no NewsMonitor
Três anos de Scala no NewsMonitor
 
Dando os primeiros passos com rails
Dando os primeiros passos com railsDando os primeiros passos com rails
Dando os primeiros passos com rails
 
Ruby and Rails intro
Ruby and Rails introRuby and Rails intro
Ruby and Rails intro
 
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
 
Doctrine 2 camada de persistência para php
Doctrine 2   camada de persistência para phpDoctrine 2   camada de persistência para php
Doctrine 2 camada de persistência para php
 
Apresentação Ruby no Dojo da UFBA
Apresentação Ruby no Dojo da UFBAApresentação Ruby no Dojo da UFBA
Apresentação Ruby no Dojo da UFBA
 

Similar to Rails na prática - Introdução ao Ruby on Rails

Introdução ao Ruby on Rails
Introdução ao Ruby on RailsIntrodução ao Ruby on Rails
Introdução ao Ruby on RailsJuan Maiz
 
Quick introduction to Ruby on Rails
Quick introduction to Ruby on RailsQuick introduction to Ruby on Rails
Quick introduction to Ruby on RailsWhitesmith
 
Introdução á linguagem Ruby com aplicativo em Rails
Introdução á linguagem Ruby com aplicativo em RailsIntrodução á linguagem Ruby com aplicativo em Rails
Introdução á linguagem Ruby com aplicativo em Railsoverduka
 
Desenvolvimento ágil de software com Ruby on Rails
Desenvolvimento ágil de software com Ruby on RailsDesenvolvimento ágil de software com Ruby on Rails
Desenvolvimento ágil de software com Ruby on RailsLucas Caton
 
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
 
Introdução ao Rails (Linguagil)
Introdução ao Rails (Linguagil)Introdução ao Rails (Linguagil)
Introdução ao Rails (Linguagil)Daniel Lopes
 
Sistemas distribuídos com RMI
Sistemas distribuídos com RMISistemas distribuídos com RMI
Sistemas distribuídos com RMICharleston Anjos
 
O que é o ruby on rails?
O que é o ruby on rails?O que é o ruby on rails?
O que é o ruby on rails?Leonardo Costa
 
Abordagem geral - Ruby on rails
Abordagem geral - Ruby on railsAbordagem geral - Ruby on rails
Abordagem geral - Ruby on railsCOTIC-PROEG (UFPA)
 
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 Railsismaelstahelin
 
Slides do curso Programação web com RubyOnRails
Slides do curso Programação web com RubyOnRailsSlides do curso Programação web com RubyOnRails
Slides do curso Programação web com RubyOnRailsTiago Godinho
 
Rails - EXATEC2009
Rails - EXATEC2009Rails - EXATEC2009
Rails - EXATEC2009Caue Guerra
 
Ruby, Simples e Expressivo
Ruby, Simples e ExpressivoRuby, Simples e Expressivo
Ruby, Simples e ExpressivoRodrigo Martins
 
Design Patterns on Rails
Design Patterns on RailsDesign Patterns on Rails
Design Patterns on Railstchandy
 
Minicurso Ruby e Rails (RailsMG UNA)
Minicurso Ruby e Rails (RailsMG UNA)Minicurso Ruby e Rails (RailsMG UNA)
Minicurso Ruby e Rails (RailsMG UNA)Daniel Lopes
 
Resolvendo problemas de dependências com o Bundler
Resolvendo problemas de dependências com o BundlerResolvendo problemas de dependências com o Bundler
Resolvendo problemas de dependências com o BundlerFrevo on Rails
 
Resolvendo problemas com o Bbundler
Resolvendo problemas com o BbundlerResolvendo problemas com o Bbundler
Resolvendo problemas com o BbundlerRodrigo Alves Vieira
 

Similar to Rails na prática - Introdução ao Ruby on Rails (20)

Introdução ao Ruby on Rails
Introdução ao Ruby on RailsIntrodução ao Ruby on Rails
Introdução ao Ruby on Rails
 
Rails na pratica
Rails na praticaRails na pratica
Rails na pratica
 
Quick introduction to Ruby on Rails
Quick introduction to Ruby on RailsQuick introduction to Ruby on Rails
Quick introduction to Ruby on Rails
 
Introdução á linguagem Ruby com aplicativo em Rails
Introdução á linguagem Ruby com aplicativo em RailsIntrodução á linguagem Ruby com aplicativo em Rails
Introdução á linguagem Ruby com aplicativo em Rails
 
Desenvolvimento ágil de software com Ruby on Rails
Desenvolvimento ágil de software com Ruby on RailsDesenvolvimento ágil de software com Ruby on Rails
Desenvolvimento ágil de software com Ruby on Rails
 
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)
 
Introdução ao Rails (Linguagil)
Introdução ao Rails (Linguagil)Introdução ao Rails (Linguagil)
Introdução ao Rails (Linguagil)
 
Sistemas distribuídos com RMI
Sistemas distribuídos com RMISistemas distribuídos com RMI
Sistemas distribuídos com RMI
 
O que é o ruby on rails?
O que é o ruby on rails?O que é o ruby on rails?
O que é o ruby on rails?
 
Abordagem geral - Ruby on rails
Abordagem geral - Ruby on railsAbordagem geral - Ruby on rails
Abordagem geral - Ruby on rails
 
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
 
Slides do curso Programação web com RubyOnRails
Slides do curso Programação web com RubyOnRailsSlides do curso Programação web com RubyOnRails
Slides do curso Programação web com RubyOnRails
 
Rails - EXATEC2009
Rails - EXATEC2009Rails - EXATEC2009
Rails - EXATEC2009
 
Ruby, Simples e Expressivo
Ruby, Simples e ExpressivoRuby, Simples e Expressivo
Ruby, Simples e Expressivo
 
Ruby e Rails
Ruby e RailsRuby e Rails
Ruby e Rails
 
Design Patterns on Rails
Design Patterns on RailsDesign Patterns on Rails
Design Patterns on Rails
 
Minicurso Ruby e Rails (RailsMG UNA)
Minicurso Ruby e Rails (RailsMG UNA)Minicurso Ruby e Rails (RailsMG UNA)
Minicurso Ruby e Rails (RailsMG UNA)
 
Resolvendo problemas de dependências com o Bundler
Resolvendo problemas de dependências com o BundlerResolvendo problemas de dependências com o Bundler
Resolvendo problemas de dependências com o Bundler
 
Resolvendo problemas com o Bbundler
Resolvendo problemas com o BbundlerResolvendo problemas com o Bbundler
Resolvendo problemas com o Bbundler
 
Palestra Fatec
Palestra FatecPalestra Fatec
Palestra Fatec
 

Rails na prática - Introdução ao Ruby on Rails

  • 1. Ruby on Rails na prática Túlio Ornelas
  • 2. 2
  • 3. Agenda • Sobre o Ruby • Como instalar • Algumas estruturas da linguagem • Sobre o Rails • Como instalar • Algumas Características do framework • Primeiro CRUD • Associações • Segundo CRUD 3
  • 4. Um pouco sobre Ruby • Criada em 1993 por Yukihiro Matz • Linguagem interpretada • “Tipagem” dinâmica • Orientada a objetos • Livre • http://www.ruby-lang.org/ 4
  • 5. Um pouco sobre Ruby • Instalando - Linux: sudo apt-get install ruby - Windows: One-Click-Installer • http://rubyinstaller.org/download.html - Mac OS X: sudo port install ruby • Testando a instalação - ruby -v [tulios] ~ ruby -v ruby 1.8.7 (2009-06-08 patchlevel 173) [universal-darwin10.0] - irb -v irb 0.9.5(05/04/13) [tulios] ~ irb -v 5
  • 6. Um pouco sobre Ruby • Interpretando um comando - Interactive Ruby Shell (IRB) [tulios] ~ irb >> puts "Oi" Oi • Interpretando um arquivo - <nome>.rb [tulios] ~ ruby file.rb 6
  • 7. Um pouco sobre Ruby • Em Ruby tudo é OO [tulios] ~ irb >> 12.class => Fixnum >> true.class => TrueClass >> nil.class => NilClass >> "Tulio".class => String 7
  • 8. Um pouco sobre Ruby • Booleans - As únicas coisas falsas são nil e false [tulios] ~ irb >> if 0 >> if 12 >> puts >> puts "verdadeiro!" "verdadeiro!" >> end >> end verdadeiro! verdadeiro! >> if nil >> if false >> puts "falso!" >> puts "falso!" >> end >> end 8
  • 9. Um pouco sobre Ruby • Variáveis - Local user - De instância @user - De classe @@user - Globais $user • Variáveis de classe são comparadas a atributos estáticos (static) em Java. 9
  • 10. Um pouco sobre Ruby • Criando uma classe - Em Ruby Em Java 10
  • 11. Um pouco sobre Ruby • Criando um objeto - Ruby - Java • Note a sintaxe simplificada, não é necessário declarar o tipo da variável. 11
  • 12. Um pouco sobre Ruby • Criando uma classe com método - Ruby Java 12
  • 13. Um pouco sobre Ruby • Utilizando a classe no IRB - Importar a classe: require [tulios] ~ irb >> require 'user' => true >> user = User.new => #<User:0x1011cae60> >> user.ola => "oi!" 13
  • 14. Um pouco sobre Ruby • Utilizando construtores - Ruby Java 14
  • 15. Um pouco sobre Ruby • Analisando - Não é necessário definir o tipo de retorno - Não é necessário utilizar parênteses (). 15
  • 16. Um pouco sobre Ruby • Construtor e “sobrecarga” do construtor 16
  • 17. Um pouco sobre Ruby • Métodos - De instância - Da classe 17
  • 18. Um pouco sobre Ruby • Vamos praticar! [tulios] ~ irb >> require 'user' => true >> user = User.new "Tulio" => #<User:0x101238410 @nome="Tulio"> >> user.equals? "Karina" => false >> User.compare "Tulio", "Renan" => false 18
  • 19. Um pouco sobre Ruby • Todo atributo em Ruby é privado! ?> user.nome NoMethodError: undefined method `nome' for #<User:0x101238410 @nome="Tulio"> from (irb):6 19
  • 20. Um pouco sobre Ruby • Métodos de acesso as variáveis 20
  • 21. Um pouco sobre Ruby • Vamos testar! [tulios] ~ irb >> require 'user' => true >> user = User.new => #<User:0x1012394a0 @nome=""> >> user.nome = "Tulio" => "Tulio" >> user.nome => "Tulio" 21
  • 22. Um pouco sobre Ruby • Como criar o get e o set “na mão”? [tulios] ~ irb >> require 'user' => true >> user = User.new => #<User:0x1012394a0 @nome=""> >> user.nome = "Tulio" => "Tulio" >> user.nome => "Tulio" 22
  • 23. Um pouco sobre Ruby • Modificadores de acesso - Privados e protegidos - Públicos • Modificador padrão, não é necessário explicitar (Também podemos utilizar a palavra public) 23
  • 24. Um pouco sobre Ruby • Utilizando a classe em outro .rb - Importar a classe: require 24
  • 25. Um pouco sobre Ruby • Herança 25
  • 26. Um pouco sobre Ruby • Testando [tulios] ~ irb >> require 'user' => true >> user = User.new "123456" => #<User:0x101230bc0 @idade=0, @senha="123456", @nome="Vazio"> >> user.nome => "Vazio" >> user.idade => 0 >> user.idade = 10 => 10 >> user.adulto? => false 26
  • 27. Um pouco sobre Ruby • Testando a herança [tulios] ~ irb >> require 'user' => true >> Person.superclass => Object >> User.superclass => Person >> User.superclass.superclass => Object 27
  • 28. Um pouco sobre Ruby • Loops - for 28
  • 29. Exercício • Imprimir os números impares até 10 29
  • 31. Um pouco sobre Ruby • Outros Loops - while 31
  • 32. Um pouco sobre Ruby • Outros Loops - iteradores 32
  • 33. Um pouco sobre Ruby • Outros Loops - métodos da classe Fixnum 33
  • 34. Um pouco sobre Ruby • Array e Hash 34
  • 35. Um pouco sobre Ruby • Exceções 35
  • 36. Um pouco sobre Ruby • Classes abertas [tulios] ~ irb >> require 'arquivo' => true >> 1.impar? => true >> 3.par? => false >> 4.par? => true 36
  • 38. O que é o Rails? • Meta-framework MVC • Desenvolvido em linguagem Ruby • Baseado em convenções • http://guias.rubyonrails.pro.br/ 38
  • 39. Rails • Lançado em julho de 2004 • Criado por David Heinemeir Hansson • Conceitos - DRY (Don’t Repeat Yourself) - Convention over Configuration 39
  • 40. Rails - composição • O Rails é a junção de 5 frameworks - Active Record (ORM) - Action Pack (MVC) - Action Mailer - Active Support - Active Resource - Action WebServices (1.2.6) 40
  • 41. Rails - instalando • O Rails é uma RubyGem • Uma gem é código ruby empacotado [tulios] ~ gem -v 1.3.6 41
  • 42. Rails - instalando • gem install rails • Vamos utilizar o SQLite3 - gem install sqlite3-ruby (driver) 42
  • 43. Rails - instalando • Verificando a instalação [tulios] ~ gem list [tulios] ~ rails -v Rails 2.3.5 *** LOCAL GEMS *** [tulios] ~ sqlite3 --version actionmailer (2.3.5, 2.3.3, 2.3.2, 2.2.2, 1.3.6) 3.6.12 actionpack (2.3.5, 2.3.3, 2.3.2, 2.2.2, 1.13.6) actionwebservice (1.2.6) activerecord (2.3.5, 2.3.3, 2.3.2, 2.2.2, 1.15.6) activeresource (2.3.5, 2.3.3, 2.3.2, 2.2.2) activesupport (2.3.5, 2.3.3, 2.3.2, 2.2.2, 1.4.4) rack (1.0.0) rails (2.3.5, 2.3.3, 2.3.2, 2.2.2, 1.2.6) rake (0.8.7, 0.8.3) sqlite3-ruby (1.2.5, 1.2.4) 43
  • 44. Rails - criando o projeto • Abra o terminal e utilize o comando: - rails <nome do projeto> [tulios] ~ rails bug_tracking create create app/controllers create app/helpers create app/models create app/views/layouts ... • O Rails irá gerar o arcabouço de um projeto MVC 44
  • 45. Rails - criando o projeto • Vamos subir o servidor - ruby script/server [tulios] ~/exemplo/bug_tracking ruby script/server => Booting Mongrel => Rails 2.3.4 application starting on http://0.0.0.0:3000 => Call with -d to detach => Ctrl-C to shutdown server - Acessar a URL http://localhost:3000 45
  • 46. Rails - criando o projeto • Página de início 46
  • 47. Rails - o projeto • Analisaremos apenas o diretório APP, por enquanto Controllers - Controladores da aplicação Models - Os modelos do seu domínio Views - As telas Helpers - Classes de ajuda 47
  • 48. Rails - scripts • Generate - Cria uma estrutura básica para o modelo • Server - Inicia o servidor da aplicação • Modo de usar: - ruby script/generate <parâmetros> - ruby script/server <parâmetros> 48
  • 49. Rake • Semelhante ao make do C/C++ ou Ant do Java • “A simple ruby build program with capabilities similar to make.” [tulios] ~ rake --version rake, version 0.8.7 49
  • 50. Rails - o projeto • Configuração padrão do banco - O banco padrão é o SQLite3, que é um banco de dados embarcado 50
  • 51. Rails - o projeto • Configuração padrão do banco 51
  • 52. Rails - 1º CRUD • Vamos utilizar o gerador scaffold (andaime) - ruby script/generate scaffold project name:string description:text owner:string - Os atributos do modelo são passados no script 52
  • 53. Rails - 1º CRUD • Saída do scaffold exists app/models/ exists app/controllers/ exists app/helpers/ create app/views/projects exists app/views/layouts/ ... create db/migrate create db/migrate/20091018202745_create_projects.rb 53
  • 54. Rails - 1º CRUD • Vamos terminar a criação do modelo • Execute os comandos: - rake db:create:all - rake db:migrate 54
  • 55. Rails - 1º CRUD • Saída do db:migrate [tulios] ~ exemplo/bug_tracking rake db:migrate (in /Users/tulios/Documents/SEA/Palestras/Rails/exemplo/bug_tracking) == CreateProjects: migrating ============================== -- create_table(:projects) -> 0.0016s == CreateProjects: migrated (0.0017s) ======================= Migrations (migrações) são uma forma de evoluir o schema do banco de dados 55
  • 56. Rails - 1º CRUD • Acesse - http://localhost:3000/projects 56
  • 57. Rails - 1º CRUD • O que fizemos? - db:migrate evoluiu o banco de dados, aplicando a migrate criada 57
  • 58. Rails - 1º CRUD • Analisando a migration criada 20091018202745_create_projects.rb Data Tipo Alvo 2009/10/18 20:27:45 58
  • 59. Rails - 1º CRUD • Código da migration 59
  • 60. Rails - 1º CRUD • Código do modelo As colunas do banco serão injetadas como atributos pelo Active Record 60
  • 61. Rails - 1º CRUD • Active Record • Vejamos alguns métodos herdados - save - find(id) - find(:all) / (:first) / (:last) • Parâmetros opcionais: :conditions, :join, :order, :limit, :offset, :select, :readonly, :from, :group, :lock ... 61
  • 62. Rails - 1º CRUD • Active Record • Mais métodos... - update_attributes(hash) - destroy - find_by_sql(string) 62
  • 63. Rails - 1º CRUD • Active Record • Dinamic finders - find_all - find_all_by_name(name) - find_all_by_name_and_age(name, age) - etc 63
  • 64. Rails - 1º CRUD • Vamos testar => ruby script/console [tulios] ~ exemplo/bug_tracking ruby script/console Loading development environment (Rails 2.3.4) >> Project.all => [#<Project id: 1, name: "Nome do projeto", description: "A descrição do projeto", owner: "Dono do projeto", created_at: "2009-10-18 22:09:45", updated_at: "2009-10-18 22:09:45">] >> Project.find_all_by_name("Nome do projeto") => [#<Project id: 1, name: "Nome do projeto", description: "A descrição do projeto", owner: "Dono do projeto", created_at: "2009-10-18 22:09:45", updated_at: "2009-10-18 22:09:45">] >> Project.count => 1 64
  • 65. Rails - 1º CRUD • Código do controlador (index) 65
  • 66. Rails - 1º CRUD • Index no formato xml • http://localhost:3000/projects.xml 66
  • 67. Rails - 1º CRUD • Código do controlador (show) Params é um hash do Rails que possui todos os atributos do request. :id é o identificador do atributo id 67
  • 68. Rails - 1º CRUD • Código do controlador (new/edit) 68
  • 69. Rails - 1º CRUD • Código do controlador (create) 69
  • 70. Rails - 1º CRUD • O flash é um hash que é apagado na próxima requisição, por isso ele é muito útil em guardar mensagens de sucesso, erro, etc. 70
  • 71. Rails - 1º CRUD • Código do controlador (update) 71
  • 72. Rails - 1º CRUD • Código do controlador (destroy) 72
  • 73. Rails - 1º CRUD • Configuração das rotas 73
  • 74. Rails - 1º CRUD • Views Nesse caso temos um layout para o controlador projects, mas poderiamos ter apenas um layout para aplicação toda. application.html.erb 74
  • 75. Rails - 1º CRUD • projects.html.erb 75
  • 76. Rails - 1º CRUD • Onde ficam os css e javascripts? stylesheet_link_tag facilita o acesso aos arquivos css :defaults carrega todos os arquivos javascript padrão do Rails 76
  • 77. Rails - 1º CRUD • index.html.erb <% para executar algum comando e <%= para escapar algum valor 77
  • 78. Rails - 1º CRUD • Método helper H Não permite a execução do html armazenado • Caso contrário 78
  • 79. Rails - 1º CRUD • Resultado - Com - Sem 79
  • 80. Rails - 1º CRUD • Vamos incrementar o modelo • Vamos utilizar: - validates_ • O que vamos validar: - nome será obrigatório, maior que 5 e menor que 50 - responsável será obrigatório 80
  • 81. Rails - 1º CRUD • Novo código do modelo 81
  • 82. Rails - 1º CRUD • Resultado 82
  • 83. Rails - 1º CRUD • Outros métodos validates_ 83
  • 84. Rails - 1º CRUD • Validação personalizada 84
  • 85. Rails • Relacionamentos entre tabelas - 1 para 1 85
  • 86. Rails • Relacionamentos entre tabelas - 1 para N 86
  • 87. Rails • Relacionamentos entre tabelas - N para N 87
  • 88. Rails - 2º CRUD • Um Projeto possui vários Bugs - ruby script/generate scaffold bug project:belongs_to description:text 88
  • 89. Rails - 2º CRUD • Vamos validar, para que project não seja nulo 89
  • 90. Rails - 2º CRUD • Aplicando as mudanças - rake db:migrate [tulios] ~ exemplo/bug_tracking rake db:migrate (in /Users/tulios/Documents/SEA/Palestras/Rails/exemplo/bug_tracking) == CreateBugs: migrating =============================== -- create_table(:bugs) -> 0.0018s == CreateBugs: migrated (0.0020s) ======================== 90
  • 91. Rails - 2º CRUD • Um projeto poderá ter vários bugs 91
  • 92. Rails - 2º CRUD • Vamos criar rotas relacionadas - config/routes.rb - A rota direta para bug foi removida http://localhost:3000/projects/5/bugs/new 92
  • 93. Rails - 2º CRUDO • Podemos pedir para o rake informar todas as rotas - rake routes 93
  • 94. Rails - 2º CRUD • Vamos adicionar o link de novo bug em projeto - project/show.html.erb 94
  • 95. Rails - 2º CRUD • Vamos corrigir bug/new.html.erb 95
  • 96. Rails - 2º CRUD • bugs_path não existe, devemos corrigir o link voltar também 96
  • 97. Rails - 2º CRUD • Vamos ajustar a criação - Método create 97
  • 98. Rails - 2º CRUD • Resultado - http://localhost:3000/projects/5 - http://localhost:3000/projects/5/bugs/new 98
  • 99. Rails - 2º CRUD • Vamos apenas melhorar a apresentação - projects/show.html.erb 99
  • 100. Rails - 2º CRUD • Configurar a página principal - apague public/index.html - mapeamento no config/routes.rb 100
  • 102. 102