ror na prática

Post on 19-May-2015

556 Views

Category:

Technology

1 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Ruby on Rails na prática

Túlio Ornelas

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

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

- irb -v

5

[tulios] ~ ruby -vruby 1.8.7 (2009-06-08 patchlevel 173) [universal-darwin10.0][tulios] ~ irb -virb 0.9.5(05/04/13)

Um pouco sobre Ruby

• Interpretando um comando

- Interactive Ruby Shell (IRB)

• Interpretando um arquivo

- <nome>.rb

6

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

[tulios] ~ ruby file.rb

Um pouco sobre Ruby

• Em Ruby tudo é OO

7

[tulios] ~ irb>> 12.class=> Fixnum

>> true.class=> TrueClass

>> nil.class=> NilClass

>> "Tulio".class=> String

Um pouco sobre Ruby

• Booleans

- As únicas coisas falsas são nil e false

8

[tulios] ~ irb>> if 12>> puts "verdadeiro!">> endverdadeiro!

>> if nil>> puts "falso!">> end

>> if 0>> puts "verdadeiro!">> endverdadeiro!

>> if false>> puts "falso!">> end

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

13

[tulios] ~ irb>> require 'user'=> true

>> user = User.new=> #<User:0x1011cae60>

>> user.ola=> "oi!"

Um pouco sobre Ruby

•Utilizando construtores

- Ruby Java

14

Um pouco sobre Ruby

•Analisando

15

- Não é necessário definir o tipo de retorno

- Não é necessário utilizar parênteses ().

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!

18

[tulios] ~ irb>> require 'user'=> true

>> user = User.new "Tulio"=> #<User:0x101238410 @nome="Tulio">

>> user.equals? "Karina"=> false

>> User.compare "Tulio", "Renan"=> false

Um pouco sobre Ruby

•Todo atributo em Ruby é privado!

19

?> user.nomeNoMethodError: undefined method `nome' for #<User:0x101238410 @nome="Tulio"> from (irb):6

Um pouco sobre Ruby

•Métodos de acesso as variáveis

20

Um pouco sobre Ruby

•Vamos testar!

21

[tulios] ~ irb>> require 'user'=> true

>> user = User.new=> #<User:0x1012394a0 @nome="">

>> user.nome = "Tulio"=> "Tulio"

>> user.nome=> "Tulio"

Um pouco sobre Ruby

•Como criar o get e o set “na mão”?

22

[tulios] ~ irb>> require 'user'=> true

>> user = User.new=> #<User:0x1012394a0 @nome="">

>> user.nome = "Tulio"=> "Tulio"

>> user.nome=> "Tulio"

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

26

[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

Um pouco sobre Ruby

•Testando a herança

27

[tulios] ~ irb>> require 'user'=> true

>> Person.superclass=> Object

>> User.superclass=> Person

>> User.superclass.superclass=> Object

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

32

•Outros Loops

- iteradores

Um pouco sobre Ruby

33

•Outros Loops

- métodos da classe Fixnum

Um pouco sobre Ruby

•Array e Hash

34

Um pouco sobre Ruby

• Exceções

35

Um pouco sobre Ruby

•Classes abertas

36

[tulios] ~ irb>> require 'arquivo'=> true

>> 1.impar?=> true>> 3.par?=> false>> 4.par?=> true

Quer aprender mais?

37

http://www.pragprog.com

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

41

[tulios] ~ gem -v1.3.6

Rails - instalando

• gem install rails

•Vamos utilizar o SQLite3

- gem install sqlite3-ruby (driver)

42

Rails - instalando

•Verificando a instalação

43

[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 -vRails 2.3.5

[tulios] ~ sqlite3 --version3.6.12

Rails - criando o projeto

• Abra o terminal e utilize o comando:

- rails <nome do projeto>

• O Rails irá gerar o arcabouço de um projeto MVC

44

[tulios] ~ rails bug_tracking create create app/controllers create app/helpers create app/models create app/views/layouts

...

Rails - criando o projeto

•Vamos subir o servidor

- ruby script/server

- Acessar a URL http://localhost:3000

45

[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

Rails - criando o projeto

• Página de início

46

Rails - o projeto

•Analisaremos apenas o diretório APP, por enquanto

47

Controllers- Controladores da aplicação

Models- Os modelos do seu domínio

Views- As telas

Helpers- Classes de ajuda

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.”

49

[tulios] ~ rake --versionrake, version 0.8.7

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

53

exists app/models/exists app/controllers/exists app/helpers/create app/views/projectsexists app/views/layouts/...create db/migratecreate db/migrate/20091018202745_create_projects.rb

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

55

[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

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

58

20091018202745_create_projects.rb

Data Tipo Alvo

2009/10/18 20:27:45

Rails - 1º CRUD

•Código da migration

59

Rails - 1º CRUD

•Código do modelo

60

As colunas do banco serão injetadas como atributos pelo Active Record

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

64

[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

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)

67

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

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

74

Nesse caso temos um layout para o controlador projects, mas poderiamos ter apenas um layout para aplicação toda.

application.html.erb

Rails - 1º CRUD

• projects.html.erb

75

Rails - 1º CRUD

•Onde ficam os css e javascripts?

76

stylesheet_link_tag facilita o acesso aos arquivos css

:defaults carrega todos os arquivos javascript padrão do Rails

Rails - 1º CRUD

• index.html.erb

77

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

Rails - 1º CRUD

•Método helper H

•Caso contrário

78

Não permite a execução do html armazenado

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

90

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

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

92

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

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?

101

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

102

top related