SlideShare uma empresa Scribd logo
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

Mais conteúdo relacionado

PDF
Desenvolvimento web com Ruby on Rails (parte 1)
PDF
Rails na pratica
PDF
Criando uma aplicação simples com ruby on rails
PPTX
Curso de Ruby on Rails
ODP
Introducao ao Ruby On Rails
PPSX
Introdução á linguagem Ruby com aplicativo em Rails
PDF
jQuery
PDF
Palestra Desenvolvimento Ágil para Web com ROR UVA
Desenvolvimento web com Ruby on Rails (parte 1)
Rails na pratica
Criando uma aplicação simples com ruby on rails
Curso de Ruby on Rails
Introducao ao Ruby On Rails
Introdução á linguagem Ruby com aplicativo em Rails
jQuery
Palestra Desenvolvimento Ágil para Web com ROR UVA

Mais procurados (20)

PDF
Ruby On Rails
PDF
Introducao ao desenvolvimento web com Rails
PDF
Ruby on Rails: um estudo de viabilidade em ambientes empresariais
PDF
Esta começando a programar para a web? Então começe com Rails
PDF
Slide Aula - Curso CakePHP
PDF
Java 9, 10 e ... 11
PDF
Ruby On Rails Regis
PDF
Zend Framework 2 - Desenvolvimento Ágil Competente
PDF
Oficina groovy grails - infoway
KEY
CakePHP e o desenvolvimento rápido
PDF
Curso de Grails
ODP
Ruby on Rails - Filosofia e Prática
ODP
Groovy grails
ODP
Mini-curso RubyOnRails CESOL
PPTX
Javascript para CSharpers 2 - Functions
PDF
CakePHP - Aprendendo a fazer o primeiro bolo
PDF
Linguagem Java
PPTX
C# 6.0 - Interopmix 2015
PDF
Desenvolvimento ágil de software com Ruby on Rails
PDF
Beyond Ruby with NodeJS - RubyConf Brasil 2010
Ruby On Rails
Introducao ao desenvolvimento web com Rails
Ruby on Rails: um estudo de viabilidade em ambientes empresariais
Esta começando a programar para a web? Então começe com Rails
Slide Aula - Curso CakePHP
Java 9, 10 e ... 11
Ruby On Rails Regis
Zend Framework 2 - Desenvolvimento Ágil Competente
Oficina groovy grails - infoway
CakePHP e o desenvolvimento rápido
Curso de Grails
Ruby on Rails - Filosofia e Prática
Groovy grails
Mini-curso RubyOnRails CESOL
Javascript para CSharpers 2 - Functions
CakePHP - Aprendendo a fazer o primeiro bolo
Linguagem Java
C# 6.0 - Interopmix 2015
Desenvolvimento ágil de software com Ruby on Rails
Beyond Ruby with NodeJS - RubyConf Brasil 2010
Anúncio

Destaque (20)

PDF
[PDF] Repensando o Desenvolvimento Web com Ruby on Rails
PPT
Mini-curso RoR - Apresentação
KEY
Desenvolvimento Ágil com Rails GURUSC 2011
PDF
Palestra Ruby on Rails SETA 2008/01
PPTX
Segurança em Rails
PPT
Mini-curso RoR - Aula 01
PDF
Introdução ao Ruby On Rails
ODP
Introdução ao Desenvolvimento WEB com Ruby on Rails
PDF
Caelum ruby-on-rails-rr71
PPT
Django: Uso de frameworks ágeis para desenvolvimento web
PDF
Apresentação ruby + rails 2014
PPSX
Conhecendo o Django
PDF
Django: desenvolvendo aplicações web de maneira simples e rápida!
PDF
Introdução a Linguagem de Programação Ruby
PDF
Ruby Beyond Rails
PDF
Rest API's with Ruby on Rails
PDF
Tutorial Django + Python
ZIP
Python e Django na Globo.com
KEY
Django - Desenvolvimento web ágil com Python
PDF
Curso de Python e Django
[PDF] Repensando o Desenvolvimento Web com Ruby on Rails
Mini-curso RoR - Apresentação
Desenvolvimento Ágil com Rails GURUSC 2011
Palestra Ruby on Rails SETA 2008/01
Segurança em Rails
Mini-curso RoR - Aula 01
Introdução ao Ruby On Rails
Introdução ao Desenvolvimento WEB com Ruby on Rails
Caelum ruby-on-rails-rr71
Django: Uso de frameworks ágeis para desenvolvimento web
Apresentação ruby + rails 2014
Conhecendo o Django
Django: desenvolvendo aplicações web de maneira simples e rápida!
Introdução a Linguagem de Programação Ruby
Ruby Beyond Rails
Rest API's with Ruby on Rails
Tutorial Django + Python
Python e Django na Globo.com
Django - Desenvolvimento web ágil com Python
Curso de Python e Django
Anúncio

Semelhante a SEA Rails na pratica (20)

PDF
Introdução ao Ruby on Rails
PDF
Ruby and Rails intro
PDF
Quick introduction to Ruby on Rails
PDF
Introdução ao Rails (Linguagil)
PPT
Sistemas distribuídos com RMI
PDF
O que é o ruby on rails?
PDF
Abordagem geral - Ruby on rails
ODP
Slides do curso Programação web com RubyOnRails
PDF
Rails - EXATEC2009
PDF
Introdução ao Ruby
PPT
Ruby, Simples e Expressivo
PPTX
Ruby e Rails
KEY
Design Patterns on Rails
PDF
Minicurso Ruby e Rails (RailsMG UNA)
PDF
Resolvendo problemas de dependências com o Bundler
PDF
Resolvendo problemas com o Bbundler
KEY
Palestra Fatec
PPT
Testes Automatizados em Ruby on Rails
PPT
Atualizando rails do 2.x para 3.x
PDF
Três anos de Scala no NewsMonitor
Introdução ao Ruby on Rails
Ruby and Rails intro
Quick introduction to Ruby on Rails
Introdução ao Rails (Linguagil)
Sistemas distribuídos com RMI
O que é o ruby on rails?
Abordagem geral - Ruby on rails
Slides do curso Programação web com RubyOnRails
Rails - EXATEC2009
Introdução ao Ruby
Ruby, Simples e Expressivo
Ruby e Rails
Design Patterns on Rails
Minicurso Ruby e Rails (RailsMG UNA)
Resolvendo problemas de dependências com o Bundler
Resolvendo problemas com o Bbundler
Palestra Fatec
Testes Automatizados em Ruby on Rails
Atualizando rails do 2.x para 3.x
Três anos de Scala no NewsMonitor

Último (8)

PPTX
Como-se-implementa-um-softwareeeeeeeeeeeeeeeeeeeeeeeee.pptx
PPTX
Arquitetura de computadores - Memórias Secundárias
PPTX
Gestao-de-Bugs-em-Software-Introducao.pptxxxxxxxx
PPTX
Informática Aplicada Informática Aplicada Plano de Ensino - estudo de caso NR...
PPTX
Mecânico de Manutenção de Equipamentos.pptx
PDF
Termos utilizados na designação de relação entre pessoa e uma obra.pdf
PDF
Manejo integrado de pragas na cultura do algodão
PPTX
Viasol Energia Solar -Soluções para geração e economia de energia
Como-se-implementa-um-softwareeeeeeeeeeeeeeeeeeeeeeeee.pptx
Arquitetura de computadores - Memórias Secundárias
Gestao-de-Bugs-em-Software-Introducao.pptxxxxxxxx
Informática Aplicada Informática Aplicada Plano de Ensino - estudo de caso NR...
Mecânico de Manutenção de Equipamentos.pptx
Termos utilizados na designação de relação entre pessoa e uma obra.pdf
Manejo integrado de pragas na cultura do algodão
Viasol Energia Solar -Soluções para geração e economia de energia

SEA Rails na pratica

  • 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