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    Rub...
Ruby on Rails
Sobre o Ruby on Rails●   Framework web implementado na linguagem Ruby●   Desenvolvimento ágil de aplicações web●   MVC●   ...
Ruby on Rails●    Principais Banco de Dados Suportados    ●        SQlite 3 (padrão)    ●        MySQL    ●        Postgre...
Ruby on Rails●    Instalação    ●        Windows:        http://railsinstaller.org    ●        Linux (Ubuntu):        http...
Sintaxe
Sintaxe●     IRB   Programa iniciado na linha de comando que permite a execução de  comandos em Ruby com responta em tempo...
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...
Sintaxe●    Operações básicas    1 + 2   # adição    4 – 2   # subtração    2 * 2   # multiplicação    6 / 2   # divisão  ...
Sintaxe●     Controles de fluxo     Maneira usual:   idade = 15   if (idade < 16) then      puts que pariu! Você não dever...
Sintaxe●    Controles de fluxo    Maneira usual um pouco melhor:   idade = 15   if idade < 16      puts Você não deveria e...
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 dir...
Sintaxe●    Controles de fluxo    Não me esqueci do else:   idade = 18   if idade < 16      puts Você não deveria estar di...
Sintaxe●     Controles de fluxo     Loops      for i in 1..10   5.times do |n|   5.upto(10) do         puts i           pu...
Sintaxe●    Arrays e Hashes  Arrays   objetos   = [carro,bicicleta,pizza]   objetos   = %w(teclado mouse livro)   puts obj...
Sintaxe●    Ruby :symbols    São cadeias de caracteres usualmente utilizados como identificadores.    Eles são como string...
Sintaxe●     Métodos (funções)     def diga_adeus_para(nome, sobrenome)        "Adeus #{nome} #{sobrenome}..."     end    ...
Sintaxe●    Classes    A maneira mais longa:             … e a mais curta:    class Pessoa                      class Pess...
Sintaxe●     Classes     Criar novas instância com o método .new   matz = Pessoa.new   matz.nome      = "Yukihiro"    matz...
Sintaxe●    Classes    Herança   class Usuario < Pessoa      attr_accessor :nome_usuario,                    :senha   end ...
Sintaxe●     Classes     As classes são abertas:   class Pessoa     def initialize(nome, sobrenome)        @nome      = no...
Mão na massa !!!
Mão na massa●    Switter    ●        Aplicação similar a uma seção do famoso microblog    ●        Exibir usuários e micro...
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 ...
Mão na massa●    Página Inicial    Criando uma Action no Controller que acabamos de gerar:    app/views/paginas/inicio.htm...
Mão na massa●    Layout padrão    ●        Contém a estrutura HTML da aplicação;    ●        A ideia é que as views gerada...
Mão na massa●    Rotas    Sistema que examina a URL solicitada e determina qual ação deve    deve ser executada pela aplic...
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 (C...
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/...
Mão na massa●    Migrations    $ rake db:migrate
Mão na massa●    Rake    ●        Executar tarefas    ●        Funciona como o Make, Ant, etc...    ●        Utilizado par...
Mão na massa●    Scaffolding
Mão na massa●    Scaffolding
Mão na massa●    Scaffolding é bom porque...    ●        É rapido    ●        Mostra como o Rails funciona    ●        Usa...
Mão na massa●    Scaffolding é ruim porque...    ●        O código não é otimizado    ●        Pode adicionar mais código ...
Mão na massa●    ActiveRecord    ●        Biblioteca ORM que encapsula as tabelas do banco de dados        como objetos   ...
Mão na massa●     ActiveRecord Interativo     Os exemplos a seguir podem ser testados por meio do rails console, que    po...
Mão na massa●    ActiveRecord Interativo    Criar um usuário:     matz=Usuario.new({:nome  => Yukihiro,                   ...
Mão na massa●     Relacionamento    Como vimos no início, um usuário possui vários microposts e um    micropost pertence a...
Mão na massa●    Relacionamento    app/models/usuario.rb    class Usuario < ActiveRecord::Base       has_many :microposts ...
Mão na massa●    Relacionamento (console)    Listar todos os microposts de um determinado usuário:     # seleciona o últim...
Mão na massa●    Relacionamento (views)    app/views/microposts/index.html.erb gerado pelo scaffold.    ...    <tr>       ...
Mão na massa●    Relacionamento (views)
Mão na massa●    Relacionamento (views)    app/views/microposts/_form.html.erb gerado pelo scaffold.    ...     <div class...
Mão na massa●    Relacionamento (views)
Mão na massa●    Validações    app/models/usuario.rb    class Usuario < ActiveRecord::Base       has_many :microposts, :de...
Mão na massa●    Validações
Mão na massa●    Validações    app/models/micropost.rb    class Micropost < ActiveRecord::Base       belongs_to :usuario  ...
Mão na massa●    Validações
Mão na massa●    Gems    ●        Gerenciador de pacotes do Ruby    ●        Facilita distribuicão de códigos    ●        ...
O que vimos até agora●   Brevemente aspectos principais da sintaxe Ruby●   Principais características do Rails●   Como cri...
Próximos passos●    Aprender mais!    ●        www.ruby-br.org    ●        www.rubyonrails.com.br    ●        www.akitaonr...
PERGUNTAS ???●    Podem me escrever diretamente    ●        juliobetta@gmail.com
Upcoming SlideShare
Loading in …5
×

Ruby on Rails (VERSAO COM LAYOUT CONSERTADO)

990 views

Published on

Slides que utilizei para ministrar uma palestra sobre Desenvolvimento WEB com Ruby on Rails no IV Congresso de Iniciação Científica da Faculdade Redentor de Itaperuna / RJ em Novembro de 2011.

Published in: Technology
0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
990
On SlideShare
0
From Embeds
0
Number of Embeds
20
Actions
Shares
0
Downloads
23
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide

Ruby on Rails (VERSAO COM LAYOUT CONSERTADO)

  1. 1. Desenvolvimento Web com Ruby on Rails Por Júlio Bêtta
  2. 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 =)
  3. 3. Ruby on Rails
  4. 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. 5. Ruby on Rails● Principais Banco de Dados Suportados ● SQlite 3 (padrão) ● MySQL ● PostgreSQL ● Oracle ● Microsoft SQL Server
  6. 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.
  7. 7. Sintaxe
  8. 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. 9. Sintaxe● Strings   "eu sou uma string" Ruby  + on Rails     
  10. 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. 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. 12. Sintaxe● Controles de fluxo Maneira usual: idade = 15   if (idade < 16) then    puts que pariu! Você não deveria estar dirigindo. end   
  13. 13. Sintaxe● Controles de fluxo Maneira usual um pouco melhor: idade = 15   if idade < 16    puts Você não deveria estar dirigindo. end   
  14. 14. Sintaxe● Controles de fluxo Isso é ótimo: idade = 15   puts Você não deveria estar dirigindo. if idade < 16   
  15. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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
  25. 25. Mão na massa !!!
  26. 26. Mão na massa● Switter ● Aplicação similar a uma seção do famoso microblog ● Exibir usuários e microposts (sweets) Entidades
  27. 27. Mão na massa● Switter $ rails new switter Estrutura de diretórios gerada automaticamente
  28. 28. Mão na massa● Switter Organiza a aplicação em componentes
  29. 29. Mão na massa● Switter Configuração da aplicação Arquivos estáticos
  30. 30. Mão na massa● Página Inicial Criando um Controller: No terminal: $ rails generate controller paginas inicio
  31. 31. Mão na massa● Página Inicial $ rails generate controller paginas inicio Arquivos gerados automaticamente na pasta app
  32. 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. 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. 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. 35. Mão na massa● Inicialização Rails já possui um webserver embutido: $ rails server
  36. 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. 37. Mão na massa● Scaffolding Estrutura gerada na pasta app
  38. 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. 39. Mão na massa● Migrations $ rake db:migrate
  40. 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. 41. Mão na massa● Scaffolding
  42. 42. Mão na massa● Scaffolding
  43. 43. Mão na massa● Scaffolding é bom porque... ● É rapido ● Mostra como o Rails funciona ● Usa padrões que usaremos no dia-a-dia
  44. 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. 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. 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. 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. 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. 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. 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. 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. 52. Mão na massa● Relacionamento (views)
  53. 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. 54. Mão na massa● Relacionamento (views)
  55. 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. 56. Mão na massa● Validações
  57. 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. 58. Mão na massa● Validações
  59. 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. 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. 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. 62. PERGUNTAS ???● Podem me escrever diretamente ● juliobetta@gmail.com

×