SEA Rails na pratica

3,249 views

Published on

Ruby on Rails na prática

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

No Downloads
Views
Total views
3,249
On SlideShare
0
From Embeds
0
Number of Embeds
39
Actions
Shares
0
Downloads
133
Comments
0
Likes
4
Embeds 0
No embeds

No notes for slide

SEA Rails na pratica

  1. 1. Ruby on Rails na prática Túlio Ornelas
  2. 2. 2
  3. 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. 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. 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. 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. 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. 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. 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. 10. Um pouco sobre Ruby • Criando uma classe - Em Ruby Em Java 10
  11. 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. 12. Um pouco sobre Ruby • Criando uma classe com método - Ruby Java 12
  13. 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. 14. Um pouco sobre Ruby • Utilizando construtores - Ruby Java 14
  15. 15. Um pouco sobre Ruby • Analisando - Não é necessário definir o tipo de retorno - Não é necessário utilizar parênteses (). 15
  16. 16. Um pouco sobre Ruby • Construtor e “sobrecarga” do construtor 16
  17. 17. Um pouco sobre Ruby • Métodos - De instância - Da classe 17
  18. 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. 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. 20. Um pouco sobre Ruby • Métodos de acesso as variáveis 20
  21. 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. 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. 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. 24. Um pouco sobre Ruby • Utilizando a classe em outro .rb - Importar a classe: require 24
  25. 25. Um pouco sobre Ruby • Herança 25
  26. 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. 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. 28. Um pouco sobre Ruby • Loops - for 28
  29. 29. Exercício • Imprimir os números impares até 10 29
  30. 30. Exercício • Solução 30
  31. 31. Um pouco sobre Ruby • Outros Loops - while 31
  32. 32. Um pouco sobre Ruby • Outros Loops - iteradores 32
  33. 33. Um pouco sobre Ruby • Outros Loops - métodos da classe Fixnum 33
  34. 34. Um pouco sobre Ruby • Array e Hash 34
  35. 35. Um pouco sobre Ruby • Exceções 35
  36. 36. Um pouco sobre Ruby • Classes abertas [tulios] ~ irb >> require 'arquivo' => true >> 1.impar? => true >> 3.par? => false >> 4.par? => true 36
  37. 37. Quer aprender mais? http://www.pragprog.com 37
  38. 38. O que é o Rails? • Meta-framework MVC • Desenvolvido em linguagem Ruby • Baseado em convenções • http://guias.rubyonrails.pro.br/ 38
  39. 39. Rails • Lançado em julho de 2004 • Criado por David Heinemeir Hansson • Conceitos - DRY (Don’t Repeat Yourself) - Convention over Configuration 39
  40. 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. 41. Rails - instalando • O Rails é uma RubyGem • Uma gem é código ruby empacotado [tulios] ~ gem -v 1.3.6 41
  42. 42. Rails - instalando • gem install rails • Vamos utilizar o SQLite3 - gem install sqlite3-ruby (driver) 42
  43. 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. 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. 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. 46. Rails - criando o projeto • Página de início 46
  47. 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. 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. 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. 50. Rails - o projeto • Configuração padrão do banco - O banco padrão é o SQLite3, que é um banco de dados embarcado 50
  51. 51. Rails - o projeto • Configuração padrão do banco 51
  52. 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. 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. 54. Rails - 1º CRUD • Vamos terminar a criação do modelo • Execute os comandos: - rake db:create:all - rake db:migrate 54
  55. 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. 56. Rails - 1º CRUD • Acesse - http://localhost:3000/projects 56
  57. 57. Rails - 1º CRUD • O que fizemos? - db:migrate evoluiu o banco de dados, aplicando a migrate criada 57
  58. 58. Rails - 1º CRUD • Analisando a migration criada 20091018202745_create_projects.rb Data Tipo Alvo 2009/10/18 20:27:45 58
  59. 59. Rails - 1º CRUD • Código da migration 59
  60. 60. Rails - 1º CRUD • Código do modelo As colunas do banco serão injetadas como atributos pelo Active Record 60
  61. 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. 62. Rails - 1º CRUD • Active Record • Mais métodos... - update_attributes(hash) - destroy - find_by_sql(string) 62
  63. 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. 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. 65. Rails - 1º CRUD • Código do controlador (index) 65
  66. 66. Rails - 1º CRUD • Index no formato xml • http://localhost:3000/projects.xml 66
  67. 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. 68. Rails - 1º CRUD • Código do controlador (new/edit) 68
  69. 69. Rails - 1º CRUD • Código do controlador (create) 69
  70. 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. 71. Rails - 1º CRUD • Código do controlador (update) 71
  72. 72. Rails - 1º CRUD • Código do controlador (destroy) 72
  73. 73. Rails - 1º CRUD • Configuração das rotas 73
  74. 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. 75. Rails - 1º CRUD • projects.html.erb 75
  76. 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. 77. Rails - 1º CRUD • index.html.erb <% para executar algum comando e <%= para escapar algum valor 77
  78. 78. Rails - 1º CRUD • Método helper H Não permite a execução do html armazenado • Caso contrário 78
  79. 79. Rails - 1º CRUD • Resultado - Com - Sem 79
  80. 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. 81. Rails - 1º CRUD • Novo código do modelo 81
  82. 82. Rails - 1º CRUD • Resultado 82
  83. 83. Rails - 1º CRUD • Outros métodos validates_ 83
  84. 84. Rails - 1º CRUD • Validação personalizada 84
  85. 85. Rails • Relacionamentos entre tabelas - 1 para 1 85
  86. 86. Rails • Relacionamentos entre tabelas - 1 para N 86
  87. 87. Rails • Relacionamentos entre tabelas - N para N 87
  88. 88. Rails - 2º CRUD • Um Projeto possui vários Bugs - ruby script/generate scaffold bug project:belongs_to description:text 88
  89. 89. Rails - 2º CRUD • Vamos validar, para que project não seja nulo 89
  90. 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. 91. Rails - 2º CRUD • Um projeto poderá ter vários bugs 91
  92. 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. 93. Rails - 2º CRUDO • Podemos pedir para o rake informar todas as rotas - rake routes 93
  94. 94. Rails - 2º CRUD • Vamos adicionar o link de novo bug em projeto - project/show.html.erb 94
  95. 95. Rails - 2º CRUD • Vamos corrigir bug/new.html.erb 95
  96. 96. Rails - 2º CRUD • bugs_path não existe, devemos corrigir o link voltar também 96
  97. 97. Rails - 2º CRUD • Vamos ajustar a criação - Método create 97
  98. 98. Rails - 2º CRUD • Resultado - http://localhost:3000/projects/5 - http://localhost:3000/projects/5/bugs/new 98
  99. 99. Rails - 2º CRUD • Vamos apenas melhorar a apresentação - projects/show.html.erb 99
  100. 100. Rails - 2º CRUD • Configurar a página principal - apague public/index.html - mapeamento no config/routes.rb 100
  101. 101. Que aprender mais? http://www.pragprog.com http://www.urubatan.com.br 101
  102. 102. 102
  103. 103. P&R http://github.com/tulios http://twitter.com/tulios ornelas.tulio@gmail.com

×