Introdução ao Desenvolvimento WEB com Ruby on Rails

1,123 views
1,056 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.
Versão PDF aqui: https://www.dropbox.com/s/2fkwksu00chm7nu/presentation.pdf

Published in: Technology
1 Comment
1 Like
Statistics
Notes
No Downloads
Views
Total views
1,123
On SlideShare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
44
Comments
1
Likes
1
Embeds 0
No embeds

No notes for slide
  • Setters incluem = como parte do nome do método Podem ser chamados com ou sem espaço
  • Setters incluem = como parte do nome do método Podem ser chamados com ou sem espaço
  • Setters incluem = como parte do nome do método Podem ser chamados com ou sem espaço
  • Notação comum para a maioria das linguagens de programação
  • Explicar o que significa sintax sugar
  • Ajuda na leitura do código
  • Tenta aproximar a liguagem de programação com a linguagem natural
  • Muito utilizados como parametros. No Rails, as requisições HTTP vem em forma de hash
  • Enfim, são construções muito simples que tornam o código mais legível e mais eficiente ao mesmo tempo.
  • Não é preciso especificar o tipo de cada parametro. A palavra-chave return é opcional, pois o valor retornado de um método em ruby é a ultima expressão executada.
  • @ na frente da variavel indica que é variável de instância. As variáveis de instancia são privadas por padrao, não sendo possível a criacao de variaveis publicas. attr_accessor gera as variáveis de instância, getters e setters.
  • Setters incluem = como parte do nome do método Podem ser chamados com ou sem espaço
  • Setters incluem = como parte do nome do método Podem ser chamados com ou sem espaço
  • Prática muito utilizada no Rails.
  • Setters incluem = como parte do nome do método Podem ser chamados com ou sem espaço
  • Setters incluem = como parte do nome do método Podem ser chamados com ou sem espaço
  • Setters incluem = como parte do nome do método Podem ser chamados com ou sem espaço
  • Setters incluem = como parte do nome do método Podem ser chamados com ou sem espaço
  • Setters incluem = como parte do nome do método Podem ser chamados com ou sem espaço
  • Setters incluem = como parte do nome do método Podem ser chamados com ou sem espaço
  • Setters incluem = como parte do nome do método Podem ser chamados com ou sem espaço
  • Setters incluem = como parte do nome do método Podem ser chamados com ou sem espaço
  • Setters incluem = como parte do nome do método Podem ser chamados com ou sem espaço
  • Setters incluem = como parte do nome do método Podem ser chamados com ou sem espaço
  • Setters incluem = como parte do nome do método Podem ser chamados com ou sem espaço
  • Setters incluem = como parte do nome do método Podem ser chamados com ou sem espaço
  • Setters incluem = como parte do nome do método Podem ser chamados com ou sem espaço
  • Setters incluem = como parte do nome do método Podem ser chamados com ou sem espaço
  • Setters incluem = como parte do nome do método Podem ser chamados com ou sem espaço
  • Setters incluem = como parte do nome do método Podem ser chamados com ou sem espaço
  • Setters incluem = como parte do nome do método Podem ser chamados com ou sem espaço
  • Setters incluem = como parte do nome do método Podem ser chamados com ou sem espaço
  • Setters incluem = como parte do nome do método Podem ser chamados com ou sem espaço
  • Setters incluem = como parte do nome do método Podem ser chamados com ou sem espaço
  • Setters incluem = como parte do nome do método Podem ser chamados com ou sem espaço
  • Setters incluem = como parte do nome do método Podem ser chamados com ou sem espaço
  • Setters incluem = como parte do nome do método Podem ser chamados com ou sem espaço
  • Setters incluem = como parte do nome do método Podem ser chamados com ou sem espaço
  • Setters incluem = como parte do nome do método Podem ser chamados com ou sem espaço
  • Setters incluem = como parte do nome do método Podem ser chamados com ou sem espaço
  • Setters incluem = como parte do nome do método Podem ser chamados com ou sem espaço
  • Setters incluem = como parte do nome do método Podem ser chamados com ou sem espaço
  • Setters incluem = como parte do nome do método Podem ser chamados com ou sem espaço
  • Setters incluem = como parte do nome do método Podem ser chamados com ou sem espaço
  • Setters incluem = como parte do nome do método Podem ser chamados com ou sem espaço
  • Setters incluem = como parte do nome do método Podem ser chamados com ou sem espaço
  • Setters incluem = como parte do nome do método Podem ser chamados com ou sem espaço
  • Setters incluem = como parte do nome do método Podem ser chamados com ou sem espaço
  • Introdução ao Desenvolvimento WEB com Ruby on Rails

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

    ×