Your SlideShare is downloading. ×
0
RoR na prática
RoR na prática
RoR na prática
RoR na prática
RoR na prática
RoR na prática
RoR na prática
RoR na prática
RoR na prática
RoR na prática
RoR na prática
RoR na prática
RoR na prática
RoR na prática
RoR na prática
RoR na prática
RoR na prática
RoR na prática
RoR na prática
RoR na prática
RoR na prática
RoR na prática
RoR na prática
RoR na prática
RoR na prática
RoR na prática
RoR na prática
RoR na prática
RoR na prática
RoR na prática
RoR na prática
RoR na prática
RoR na prática
RoR na prática
RoR na prática
RoR na prática
RoR na prática
RoR na prática
RoR na prática
RoR na prática
RoR na prática
RoR na prática
RoR na prática
RoR na prática
RoR na prática
RoR na prática
RoR na prática
RoR na prática
RoR na prática
RoR na prática
RoR na prática
RoR na prática
RoR na prática
RoR na prática
RoR na prática
RoR na prática
RoR na prática
RoR na prática
RoR na prática
RoR na prática
RoR na prática
RoR na prática
RoR na prática
RoR na prática
RoR na prática
RoR na prática
RoR na prática
RoR na prática
RoR na prática
RoR na prática
RoR na prática
RoR na prática
RoR na prática
RoR na prática
RoR na prática
RoR na prática
RoR na prática
RoR na prática
RoR na prática
RoR na prática
RoR na prática
RoR na prática
RoR na prática
RoR na prática
RoR na prática
RoR na prática
RoR na prática
RoR na prática
RoR na prática
RoR na prática
RoR na prática
RoR na prática
RoR na prática
RoR na prática
RoR na prática
RoR na prática
RoR na prática
RoR na prática
RoR na prática
RoR na prática
RoR na prática
RoR na prática
RoR na prática
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

RoR na prática

543

Published on

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

  • Be the first to like this

No Downloads
Views
Total Views
543
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
38
Comments
0
Likes
0
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. Ruby on Rails na práticaTú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.nomeNoMethodError: 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
  • 30. Exercício• Solução 30
  • 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
  • 37. Quer aprender mais?http://www.pragprog.com 37
  • 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 --versionactionmailer (2.3.5, 2.3.3, 2.3.2, 2.2.2, 1.3.6) 3.6.12actionpack (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 deevoluir 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 Alvo2009/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/consoleLoading 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 possuitodos os atributos do request. :id é oidentificador 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 <%= paraescapar 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
  • 101. Que aprender mais?http://www.pragprog.comhttp://www.urubatan.com.br 101
  • 102. 102
  • 103. P&Rhttp://github.com/tulioshttp://twitter.com/tuliosornelas.tulio@gmail.com

×