• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
SEA Rails na pratica
 

SEA Rails na pratica

on

  • 3,339 views

Ruby on Rails na prática

Ruby on Rails na prática

Statistics

Views

Total Views
3,339
Views on SlideShare
3,303
Embed Views
36

Actions

Likes
3
Downloads
111
Comments
0

2 Embeds 36

http://www.slideshare.net 33
http://www.linkedin.com 3

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    SEA Rails na pratica SEA Rails na pratica Presentation Transcript

    • 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