Você está na página 1de 98

Ruby on Rails na prtica

Agenda

Sobre o Ruby Como instalar Algumas estruturas da linguagem Sobre o Rails Como instalar Algumas Caractersticas do framework Primeiro CRUD Associaes Segundo CRUD

Um pouco sobre Ruby



Criada em 1993 por Yukihiro Matz Linguagem interpretada Tipagem dinmica Orientada a objetos Livre http://www.ruby-lang.org/

Um pouco sobre Ruby


Instalando - Linux: sudo apt-get install ruby - Windows: One-Click-Installer Testando a instalao ruby -v [tulios] ~ ruby -v ruby 1.8.7 (2009-06-08 patchlevel 173) [universal-darwin10.0] [tulios] ~ irb -v - irb -v irb 0.9.5(05/04/13)
5

http://rubyinstaller.org/download.html

Mac OS X: sudo port install ruby

Um pouco sobre Ruby

Interpretando um comando - Interactive Ruby Shell (IRB) Interpretando um arquivo - <nome>.rb


[tulios] ~ ruby le.rb
6

[tulios] ~ irb >> puts "Oi" Oi

Um pouco sobre Ruby

Em Ruby tudo OO
[tulios] ~ irb >> 12.class => Fixnum >> true.class => TrueClass >> nil.class => NilClass >> "Tulio".class => String

Um pouco sobre Ruby

Criando uma classe - Em Ruby

Em Java

Um pouco sobre Ruby

Criando um objeto - Ruby - Java Note a sintaxe simplicada, no


necessrio declarar o tipo da varivel.
9

Um pouco sobre Ruby

Criando uma classe com mtodo e


construtor Ruby

Java

10

Um pouco sobre Ruby

Analisando
- No necessrio denir o tipo de retorno - No necessrio utilizar parnteses ().

11

Um pouco sobre Ruby

Variveis - Local - De instncia - De classe - Globais

user @user @@user $user

Variveis de classe so comparadas a


atributos estticos (static) em Java.
12

Um pouco sobre Ruby

Construtor e sobrecarga do
construtor

13

Um pouco sobre Ruby


Mtodos - De instncia Da classe

14

Um pouco sobre Ruby

Modicadores de acesso - Privados e protegidos Pblicos

Modicador padro, no necessrio explicitar (Tambm podemos utilizar a palavra public)


15

Um pouco sobre Ruby

Mtodos de acesso as variveis

16

Um pouco sobre Ruby

Reestruturando nossa classe

17

Um pouco sobre Ruby

Utilizando a classe no IRB - Importar a classe: require


[tulios] ~/Desktop irb >> require 'user' => true >> user = User.new "Tulio" => #<User:0x1011cae60 @name="Tulio", @age=nil> >> user.name => "Tulio"

18

Um pouco sobre Ruby

Utilizando a classe em outro .rb - Importar a classe: require

19

Um pouco sobre Ruby

Herana

20

Um pouco sobre Ruby

Testando a herana
[tulios] ~/Desktop irb >> require 'user' => true >> Person.superclass => Object >> User.superclass => Person >> User.superclass.superclass => Object

21

Um pouco sobre Ruby


Booleans - As nicas coisas falsas so nil e false
[tulios] ~/Desktop irb >> require 'bool' => true >> Bool.true? 12 verdadeiro! >> Bool.true? "nome" verdadeiro! >> Bool.true? nil falso! >> Bool.true? 0 verdadeiro! >> Bool.true? false falso!
22

Um pouco sobre Ruby

Loops - for

23

Exerccio

Dado um nmero imprimir todos


os mpares at ele.

24

Exerccio

Soluo

25

Um pouco sobre Ruby

Outros Loops - while

26

Um pouco sobre Ruby

Outros Loops - iteradores

27

Um pouco sobre Ruby

Outros Loops - mtodos da classe Fixnum

28

Um pouco sobre Ruby

Array e Hash

29

Um pouco sobre Ruby

Excees

30

Um pouco sobre Ruby

Classes abertas

31

Quer aprender mais?

http://www.pragprog.com
32

O que o Rails?

Meta-framework MVC Desenvolvido em linguagem Ruby Baseado em convenes http://guias.rubyonrails.pro.br/

33

Rails

Lanado em julho de 2004 Criado por David Heinemeir


Hansson

Conceitos - DRY (Dont Repeat Yourself) - Convention over Conguration


34

Rails - composio

O Rails a juno de 5 frameworks - Active Record (ORM) - Action Pack (MVC) - Action Mailer - Active Support - Active Resource - Action WebServices (1.2.6)
35

Rails - instalando

O Rails uma RubyGem Uma gem cdigo ruby


empacotado
[tulios] ~ gem -v 1.3.5

36

Rails - instalando

gem install rails Vamos utilizar o SQLite3 - gem install sqlite3-ruby (driver)

37

Rails - instalando

Vericando a instalao
[tulios] ~ gem list *** LOCAL GEMS *** actionmailer (2.3.5, 2.3.3, 2.3.2, 2.2.2, 1.3.6) 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) [tulios] ~ rails -v Rails 2.3.5 [tulios] ~ sqlite3 --version 3.6.12

38

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 arcabouo de um


projeto MVC
39

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

40

Rails - criando o projeto

Pgina de incio

41

Rails - o projeto

Analisaremos apenas o diretrio


APP, por enquanto
Controllers - Controladores da aplicao Models - Os modelos do seu domnio Views - As telas Helpers - Classes de ajuda
42

Rails - scripts

Generate - Cria uma estrutura bsica para o modelo Server - Inicia o servidor da aplicao Modo de usar: - ruby script/generate <parmetros> - ruby script/server <parmetros>
43

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

44

Rails - o projeto

Congurao padro do banco - O banco padro o SQLite3, que um


banco de dados embarcado

45

Rails - o projeto

Congurao padro do banco

46

Rails - 1 CRUD

Vamos utilizar o gerador scaffold


(andaime)

ruby script/generate scaffold project name:string description:text owner:string Os atributos do modelo so passados no script

47

Rails - 1 CRUD

Sada 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

Migrations (migraes) so uma forma de evoluir o schema do banco de dados


48

Rails - 1 CRUD

Vamos terminar a criao do


modelo

Execute os comandos: - rake db:create:all - rake db:migrate


49

Rails - 1 CRUD

O que zemos? - db:migrate evoluiu o banco de dados,


aplicando a migrate criada

50

Rails - 1 CRUD

Sada 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) =======================

51

Rails - 1 CRUD

Acesse - http://localhost:3000/projects

52

Rails - 1 CRUD

Analisando a migration criada


20091018202745_create_projects.rb Data Tipo Alvo

2009/10/18 20:27:45
53

Rails - 1 CRUD

Cdigo da migration

54

Rails - 1 CRUD

Cdigo do modelo

As colunas do banco sero injetadas como atributos pelo Active Record


55

Rails - 1 CRUD

Active Record Vejamos alguns mtodos herdados - save - nd(id) - nd(:all) / (:rst) / (:last)

Parmetros opcionais:
:conditions, :join, :order, :limit, :offset, :select, :readonly, :from, :group, :lock ...

56

Rails - 1 CRUD

Active Record Mais mtodos... - update_attributes(hash) - destroy - nd_by_sql(string)


57

Rails - 1 CRUD

Active Record Dinamic nders - nd_all - nd_all_by_name(name) - nd_all_by_name_and_age(name, age) - etc


58

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 descrio do projeto", owner: "Dono do projeto", created_at: "2009-10-18 22:09:45", updated_at: "2009-10-18 22:09:45">] >> Project.nd_all_by_name("Nome do projeto") => [#<Project id: 1, name: "Nome do projeto", description: "A descrio 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
59

Rails - 1 CRUD

Cdigo do controlador (index)

60

Rails - 1 CRUD

Index no formato xml http://localhost:3000/projects.xml

61

Rails - 1 CRUD

Cdigo do controlador (show)

Params um hash do Rails que possui todos os atributos do request. :id o identicador do atributo id
62

Rails - 1 CRUD

Cdigo do controlador (new/edit)

63

Rails - 1 CRUD

Cdigo do controlador (create)

64

Rails - 1 CRUD

O ash um hash que apagado

na prxima requisio, por isso ele muito til em guardar mensagens de sucesso, erro, etc.

65

Rails - 1 CRUD

Cdigo do controlador (update)

66

Rails - 1 CRUD

Cdigo do controlador (destroy)

67

Rails - 1 CRUD

Congurao das rotas

68

Rails - 1 CRUD

Views

Nesse caso temos um layout para o controlador projects, mas poderiamos ter apenas um layout para aplicao toda. application.html.erb
69

Rails - 1 CRUD
projects.html.erb

70

Rails - 1 CRUD

Onde cam os css e javascripts?


stylesheet_link_tag facilita o acesso aos arquivos css

:defaults carrega todos os arquivos javascript padro do Rails


71

Rails - 1 CRUD

index.html.erb

<% para executar algum comando e <%= para escapar algum valor
72

Rails - 1 CRUD

Mtodo helper H
No permite a execuo do html armazenado

Caso contrrio

73

Rails - 1 CRUD

Resultado - Com Sem

74

Rails - 1 CRUD

Vamos incrementar o modelo Vamos utilizar: - validates_ O que vamos validar: - nome ser obrigatrio, maior que 5 e
menor que 50

responsvel ser obrigatrio


75

Rails - 1 CRUD

Novo cdigo do modelo

76

Rails - 1 CRUD

Resultado

77

Rails - 1 CRUD

Outros mtodos validates_

78

Rails - 1 CRUD

Validao personalizada

79

Rails

Relacionamentos entre tabelas - 1 para 1

80

Rails

Relacionamentos entre tabelas - 1 para N

81

Rails

Relacionamentos entre tabelas - N para N

82

Rails - 2 CRUD

Um Projeto possui vrios Bugs - ruby script/generate scaffold bug


project:belongs_to description:text

83

Rails - 2 CRUD

Vamos validar, para que project


no seja nulo

84

Rails - 2 CRUD

Aplicando as mudanas - 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) ========================

85

Rails - 2 CRUD

Um projeto poder ter vrios bugs

86

Rails - 2 CRUD

Vamos criar rotas relacionadas - cong/routes.rb - A rota direta para bug foi removida
http://localhost:3000/projects/5/bugs/new
87

Rails - 2 CRUDO

Podemos pedir para o rake


informar todas as rotas rake routes

88

Rails - 2 CRUD

Vamos adicionar o link de novo


bug em projeto

project/show.html.erb

89

Rails - 2 CRUD

Vamos corrigir bug/new.html.erb

90

Rails - 2 CRUD

bugs_path no existe, devemos


corrigir o link voltar tambm

91

Rails - 2 CRUD

Vamos ajustar a criao - Mtodo create

92

Rails - 2 CRUD

Resultado - http://localhost:3000/projects/5 - http://localhost:3000/projects/5/bugs/new

93

Rails - 2 CRUD

Vamos apenas melhorar a


apresentao

projects/show.html.erb

94

Rails - 2 CRUD

Congurar a pgina principal - apague public/index.html - mapeamento no cong/routes.rb

95

Que aprender mais?

http://www.pragprog.com http://www.urubatan.com.br
96

97

P&R

http://github.com/tulios http://twitter.com/tulios ornelas.tulio@gmail.com

Você também pode gostar