ruby on rails (versao com layout consertado)
DESCRIPTION
Slides que utilizei para ministrar uma palestra sobre Desenvolvimento WEB com Ruby on Rails no IV Congresso de Iniciação Científica da Faculdade Redentor de Itaperuna / RJ em Novembro de 2011.TRANSCRIPT
![Page 1: Ruby on Rails (VERSAO COM LAYOUT CONSERTADO)](https://reader034.vdocuments.pub/reader034/viewer/2022051817/5485b054b47959dd0c8b4f0e/html5/thumbnails/1.jpg)
Desenvolvimento Web com Desenvolvimento Web com Ruby on RailsRuby on Rails
Por Júlio BêttaPor Júlio Bêtta
![Page 2: Ruby on Rails (VERSAO COM LAYOUT CONSERTADO)](https://reader034.vdocuments.pub/reader034/viewer/2022051817/5485b054b47959dd0c8b4f0e/html5/thumbnails/2.jpg)
Por que Ruby ???Por que Ruby ???
● Linguagem dinâmicaLinguagem dinâmica● Totalmente Orientado a ObjetosTotalmente Orientado a Objetos● Sintaxe flexívelSintaxe flexível● Cross-plataformCross-plataform
Ruby(C), jRuby(Java), IronRuby(.NET)Ruby(C), jRuby(Java), IronRuby(.NET)
● Software LivreSoftware Livre● Programadores mais felizes =)Programadores mais felizes =)
![Page 3: Ruby on Rails (VERSAO COM LAYOUT CONSERTADO)](https://reader034.vdocuments.pub/reader034/viewer/2022051817/5485b054b47959dd0c8b4f0e/html5/thumbnails/3.jpg)
Ruby on RailsRuby on Rails
![Page 4: Ruby on Rails (VERSAO COM LAYOUT CONSERTADO)](https://reader034.vdocuments.pub/reader034/viewer/2022051817/5485b054b47959dd0c8b4f0e/html5/thumbnails/4.jpg)
● Framework web implementado na linguagem RubyFramework web implementado na linguagem Ruby● Desenvolvimento ágil de aplicações webDesenvolvimento ágil de aplicações web● MVCMVC● Utiliza o conceito Convention over Configuration (CoC)Utiliza o conceito Convention over Configuration (CoC)● E muito mais ...E muito mais ...
Sobre o Ruby on RailsSobre o Ruby on Rails
![Page 5: Ruby on Rails (VERSAO COM LAYOUT CONSERTADO)](https://reader034.vdocuments.pub/reader034/viewer/2022051817/5485b054b47959dd0c8b4f0e/html5/thumbnails/5.jpg)
● Principais Banco de Dados SuportadosPrincipais Banco de Dados Suportados
Ruby on Rails
● SQlite 3 (padrão)● MySQL● PostgreSQL● Oracle● Microsoft SQL Server
![Page 6: Ruby on Rails (VERSAO COM LAYOUT CONSERTADO)](https://reader034.vdocuments.pub/reader034/viewer/2022051817/5485b054b47959dd0c8b4f0e/html5/thumbnails/6.jpg)
● InstalaçãoInstalação● Windows:
http://railsinstaller.org
● Linux (Ubuntu): https://github.com/juliobetta/RoR/tree/master/installation
Os exemplos a seguir foram testados apenas em ambiente LINUX.Os exemplos a seguir foram testados apenas em ambiente LINUX.
Ruby on Rails
![Page 7: Ruby on Rails (VERSAO COM LAYOUT CONSERTADO)](https://reader034.vdocuments.pub/reader034/viewer/2022051817/5485b054b47959dd0c8b4f0e/html5/thumbnails/7.jpg)
SintaxeSintaxe
![Page 8: Ruby on Rails (VERSAO COM LAYOUT CONSERTADO)](https://reader034.vdocuments.pub/reader034/viewer/2022051817/5485b054b47959dd0c8b4f0e/html5/thumbnails/8.jpg)
● IRBIRB
Sintaxe
Programa iniciado na linha de comando que permite a execução de Programa iniciado na linha de comando que permite a execução de comandos em Ruby com responta em tempo-real.comandos em Ruby com responta em tempo-real.
Todos os comandos a seguir podem ser testados utilizando oTodos os comandos a seguir podem ser testados utilizando o irb irb..
![Page 9: Ruby on Rails (VERSAO COM LAYOUT CONSERTADO)](https://reader034.vdocuments.pub/reader034/viewer/2022051817/5485b054b47959dd0c8b4f0e/html5/thumbnails/9.jpg)
● StringsStrings
Sintaxe
"eu sou uma string"'Ruby ' + 'on Rails'
![Page 10: Ruby on Rails (VERSAO COM LAYOUT CONSERTADO)](https://reader034.vdocuments.pub/reader034/viewer/2022051817/5485b054b47959dd0c8b4f0e/html5/thumbnails/10.jpg)
● VariáveisVariáveis Sintaxe
nome = "Ruby"
versao = 3nome = "Rails " + versao (TYPE ERROR)
Não é preciso declarar o tipo:Não é preciso declarar o tipo:
Porém a tipagem no Ruby é forte:Porém a tipagem no Ruby é forte:
versao = 3nome = "Ruby" curso = "#{nome} on Rails #{versao}"
Podemos avaliar expressões dentro de strings com conversão Podemos avaliar expressões dentro de strings com conversão automática:automática:
versao = 3nome = "Rails " + versao.to_s
![Page 11: Ruby on Rails (VERSAO COM LAYOUT CONSERTADO)](https://reader034.vdocuments.pub/reader034/viewer/2022051817/5485b054b47959dd0c8b4f0e/html5/thumbnails/11.jpg)
● Operações básicasOperações básicas
● OperadoresOperadores
Sintaxe
5 == (2+3) # igualdade2 != 3 # inigualdade 10 > 13 # maior3 < 10 # menor5 <= 5 # menor ou igual5 >= 5 # maior ou igual
1 + 2 # adição4 – 2 # subtração2 * 2 # multiplicação6 / 2 # divisão15 % 2 # modulo
![Page 12: Ruby on Rails (VERSAO COM LAYOUT CONSERTADO)](https://reader034.vdocuments.pub/reader034/viewer/2022051817/5485b054b47959dd0c8b4f0e/html5/thumbnails/12.jpg)
● Controles de fluxoControles de fluxoManeira usual:Maneira usual:
Sintaxe
idade = 15if (idade < 16) then puts 'que pariu! Você não deveria estar dirigindo.'end
![Page 13: Ruby on Rails (VERSAO COM LAYOUT CONSERTADO)](https://reader034.vdocuments.pub/reader034/viewer/2022051817/5485b054b47959dd0c8b4f0e/html5/thumbnails/13.jpg)
● Controles de fluxoControles de fluxoManeira usual um pouco melhor:Maneira usual um pouco melhor:
Sintaxe
idade = 15if idade < 16 puts 'Você não deveria estar dirigindo.'end
![Page 14: Ruby on Rails (VERSAO COM LAYOUT CONSERTADO)](https://reader034.vdocuments.pub/reader034/viewer/2022051817/5485b054b47959dd0c8b4f0e/html5/thumbnails/14.jpg)
● Controles de fluxoControles de fluxoIsso é ótimo:Isso é ótimo:
Sintaxe
idade = 15puts 'Você não deveria estar dirigindo.' if idade < 16
![Page 15: Ruby on Rails (VERSAO COM LAYOUT CONSERTADO)](https://reader034.vdocuments.pub/reader034/viewer/2022051817/5485b054b47959dd0c8b4f0e/html5/thumbnails/15.jpg)
● Controles de fluxoControles de fluxoAlgo diferente:Algo diferente:
Sintaxe
idade = 15unless idade >= 16 puts 'Você não deveria estar dirigindo.'end
idade = 15puts 'Você não deveria estar dirigindo.' unless idade >= 16
ou:
![Page 16: Ruby on Rails (VERSAO COM LAYOUT CONSERTADO)](https://reader034.vdocuments.pub/reader034/viewer/2022051817/5485b054b47959dd0c8b4f0e/html5/thumbnails/16.jpg)
● Controles de fluxoControles de fluxoNão me esqueci do else:Não me esqueci do else:
Sintaxe
idade = 18if idade < 16 puts 'Você não deveria estar dirigindo.'else puts 'Pode seguir!'end
idade = 18puts idade >= 16 ? 'Pode seguir!':'Vai pra casa!'
Famosos operadores ternários:
![Page 17: Ruby on Rails (VERSAO COM LAYOUT CONSERTADO)](https://reader034.vdocuments.pub/reader034/viewer/2022051817/5485b054b47959dd0c8b4f0e/html5/thumbnails/17.jpg)
● Controles de fluxoControles de fluxoLoopsLoops
Sintaxe
letras = ['a','b','c','d']letras.each do |letra|
puts letraend
for i in 1..10puts i
end
5.times do |n|puts n
end
5.upto(10) doputs 'Oi!'
end
i = 0while i < 5
puts ii += 1
end
![Page 18: Ruby on Rails (VERSAO COM LAYOUT CONSERTADO)](https://reader034.vdocuments.pub/reader034/viewer/2022051817/5485b054b47959dd0c8b4f0e/html5/thumbnails/18.jpg)
● Arrays e HashesArrays e Hashes
Sintaxe
objetos = ['carro','bicicleta','pizza']objetos = %w(teclado mouse livro)puts objetos[0]
ArraysArrays
atributos = {:nome => 'Yukihiro', :sobrenome => 'Matsumoto', :email => '[email protected]'}puts atributos[:nome]
HashHash
![Page 19: Ruby on Rails (VERSAO COM LAYOUT CONSERTADO)](https://reader034.vdocuments.pub/reader034/viewer/2022051817/5485b054b47959dd0c8b4f0e/html5/thumbnails/19.jpg)
● Ruby :symbolsRuby :symbolsSão cadeias de caracteres usualmente utilizados como identificadores. São cadeias de caracteres usualmente utilizados como identificadores. Eles são como strings , porém reusam o mesmo espaço de memória.Eles são como strings , porém reusam o mesmo espaço de memória.
Vejamos:Vejamos:
Sintaxe
"carro".object_id=> 2953810"carro".object_id=> 2951340
:carro.object_id=> 166418:carro.object_id=> 166418
![Page 20: Ruby on Rails (VERSAO COM LAYOUT CONSERTADO)](https://reader034.vdocuments.pub/reader034/viewer/2022051817/5485b054b47959dd0c8b4f0e/html5/thumbnails/20.jpg)
● Métodos (funções)Métodos (funções)
Sintaxe
def diga_adeus_para(nome, sobrenome) "Adeus #{nome} #{sobrenome}..."end
puts diga_adeus_para("Yukihiro", "Matsumoto")
puts diga_adeus_para "Yukihiro", "Matsumoto"
Como parênteses neste caso são opcionais, soa mais natural como:Como parênteses neste caso são opcionais, soa mais natural como:
![Page 21: Ruby on Rails (VERSAO COM LAYOUT CONSERTADO)](https://reader034.vdocuments.pub/reader034/viewer/2022051817/5485b054b47959dd0c8b4f0e/html5/thumbnails/21.jpg)
● ClassesClasses
Sintaxe
class Pessoa @nome @sobrenome
def nome @nome
end
def sobrenome @sobrenome
end
def nome=(nome) @nome = nomeend
def sobrenome=(sobrenome) @sobrenome = sobrenomeend
end
A maneira mais longa:A maneira mais longa: … … e a mais curta:e a mais curta:class Pessoa attr_accessor :nome,
:sobrenomeend
Define getters e settersDefine getters e setters
class Pessoa attr_reader :nome,
:sobrenomeend
Define somente gettersDefine somente getters
class Pessoa attr_writer :nome,
:sobrenomeend
Define somente settersDefine somente setters
![Page 22: Ruby on Rails (VERSAO COM LAYOUT CONSERTADO)](https://reader034.vdocuments.pub/reader034/viewer/2022051817/5485b054b47959dd0c8b4f0e/html5/thumbnails/22.jpg)
● ClassesClasses
Sintaxe
matz = Pessoa.newmatz.nome = "Yukihiro" matz.sobrenome = "Matsumoto"puts matz.nomeputs matz.sobrenome
Criar novas instância com o método .newCriar novas instância com o método .newCriar novas instância com o método .newCriar novas instância com o método .new
![Page 23: Ruby on Rails (VERSAO COM LAYOUT CONSERTADO)](https://reader034.vdocuments.pub/reader034/viewer/2022051817/5485b054b47959dd0c8b4f0e/html5/thumbnails/23.jpg)
● ClassesClasses
Sintaxe
HerançaHerança
class Usuario < Pessoa attr_accessor :nome_usuario,
:senhaend
matz = Usuario.newmatz.nome = "Yukihiro" matz.sobrenome = "Matsumoto"matz.nome_usuario = "matz"matz.senha = "abc123"
![Page 24: Ruby on Rails (VERSAO COM LAYOUT CONSERTADO)](https://reader034.vdocuments.pub/reader034/viewer/2022051817/5485b054b47959dd0c8b4f0e/html5/thumbnails/24.jpg)
● ClassesClasses
Sintaxe
class Pessoadef initialize(nome, sobrenome)
@nome = nome@sobrenome = sobrenome
end
def to_s"#{@nome} #{@sobrenome}"
endend
As classes são abertas:As classes são abertas:
matz = Pessoa.new "Yukihiro", "Matsumoto"puts matz
![Page 25: Ruby on Rails (VERSAO COM LAYOUT CONSERTADO)](https://reader034.vdocuments.pub/reader034/viewer/2022051817/5485b054b47959dd0c8b4f0e/html5/thumbnails/25.jpg)
Mão na massa !!!Mão na massa !!!
![Page 26: Ruby on Rails (VERSAO COM LAYOUT CONSERTADO)](https://reader034.vdocuments.pub/reader034/viewer/2022051817/5485b054b47959dd0c8b4f0e/html5/thumbnails/26.jpg)
● SwitterSwitter
Mão na massa
● Aplicação similar a uma seção do famoso microblog● Exibir usuários e microposts (sweets)
Entidades
![Page 27: Ruby on Rails (VERSAO COM LAYOUT CONSERTADO)](https://reader034.vdocuments.pub/reader034/viewer/2022051817/5485b054b47959dd0c8b4f0e/html5/thumbnails/27.jpg)
● SwitterSwitter
Mão na massa
$ rails new switter
Estrutura de diretórios gerada Estrutura de diretórios gerada automaticamenteautomaticamente
![Page 28: Ruby on Rails (VERSAO COM LAYOUT CONSERTADO)](https://reader034.vdocuments.pub/reader034/viewer/2022051817/5485b054b47959dd0c8b4f0e/html5/thumbnails/28.jpg)
● SwitterSwitter
Mão na massa
Organiza a aplicação em Organiza a aplicação em componentescomponentes
![Page 29: Ruby on Rails (VERSAO COM LAYOUT CONSERTADO)](https://reader034.vdocuments.pub/reader034/viewer/2022051817/5485b054b47959dd0c8b4f0e/html5/thumbnails/29.jpg)
● SwitterSwitter
Mão na massa
Configuração da aplicaçãoConfiguração da aplicação Arquivos estáticosArquivos estáticos
![Page 30: Ruby on Rails (VERSAO COM LAYOUT CONSERTADO)](https://reader034.vdocuments.pub/reader034/viewer/2022051817/5485b054b47959dd0c8b4f0e/html5/thumbnails/30.jpg)
● Página InicialPágina Inicial
Mão na massa
$ rails generate controller paginas inicio
Criando um Controller:Criando um Controller:
No terminal:
![Page 31: Ruby on Rails (VERSAO COM LAYOUT CONSERTADO)](https://reader034.vdocuments.pub/reader034/viewer/2022051817/5485b054b47959dd0c8b4f0e/html5/thumbnails/31.jpg)
● Página InicialPágina Inicial
Mão na massa
$ rails generate controller paginas inicio
Arquivos gerados automaticamente Arquivos gerados automaticamente na pasta na pasta appapp
![Page 32: Ruby on Rails (VERSAO COM LAYOUT CONSERTADO)](https://reader034.vdocuments.pub/reader034/viewer/2022051817/5485b054b47959dd0c8b4f0e/html5/thumbnails/32.jpg)
● Página InicialPágina Inicial
Mão na massa
Criando uma Action no Controller que acabamos de gerar:Criando uma Action no Controller que acabamos de gerar:
class PaginasController < ApplicationControllerdef inicio
render 'paginas/inicio'end
end
app/controllers/paginas_controller.rbapp/controllers/paginas_controller.rb
<h2>Seja bemvindo ao Switter!!!</h2>
app/views/paginas/inicio.html.erbapp/views/paginas/inicio.html.erb
![Page 33: Ruby on Rails (VERSAO COM LAYOUT CONSERTADO)](https://reader034.vdocuments.pub/reader034/viewer/2022051817/5485b054b47959dd0c8b4f0e/html5/thumbnails/33.jpg)
● Layout padrãoLayout padrão
Mão na massa
<!DOCTYPE html><html><head> <title>Switter</title> <%= stylesheet_link_tag "application" %> <%= javascript_include_tag "application" %> <%= csrf_meta_tags %></head><body><%= yield %></body></html>
● Contém a estrutura HTML da aplicação;● A ideia é que as views geradas nos controllers sejam incluídas
neste arquivo, através do método yield.
app/views/layouts/application.html.erbapp/views/layouts/application.html.erb
![Page 34: Ruby on Rails (VERSAO COM LAYOUT CONSERTADO)](https://reader034.vdocuments.pub/reader034/viewer/2022051817/5485b054b47959dd0c8b4f0e/html5/thumbnails/34.jpg)
● RotasRotas
Mão na massa
Switter::Application.routes.draw do get 'paginas/inicio'end
Sistema que examina a URL solicitada e determina qual ação deveSistema que examina a URL solicitada e determina qual ação devedeve ser executada pela aplicação. deve ser executada pela aplicação.
config/routes.rbconfig/routes.rb
![Page 35: Ruby on Rails (VERSAO COM LAYOUT CONSERTADO)](https://reader034.vdocuments.pub/reader034/viewer/2022051817/5485b054b47959dd0c8b4f0e/html5/thumbnails/35.jpg)
● InicializaçãoInicialização
Mão na massa
Rails já possui um webserver embutido:Rails já possui um webserver embutido:
$ rails server
![Page 36: Ruby on Rails (VERSAO COM LAYOUT CONSERTADO)](https://reader034.vdocuments.pub/reader034/viewer/2022051817/5485b054b47959dd0c8b4f0e/html5/thumbnails/36.jpg)
● ScaffoldingScaffolding
Mão na massa
● Criar model, controller e views para criar, exibir, atualizar e deletar (CRUD) o recurso que especificarmos
● Também é responsável por criar as tabelas do banco de dados
$ rails generate scaffold usuario nome:string email:string
$ rails generate scaffold micropost usuario_id:integer conteudo:string
![Page 37: Ruby on Rails (VERSAO COM LAYOUT CONSERTADO)](https://reader034.vdocuments.pub/reader034/viewer/2022051817/5485b054b47959dd0c8b4f0e/html5/thumbnails/37.jpg)
● ScaffoldingScaffolding
Mão na massa
Estrutura gerada na pasta Estrutura gerada na pasta appapp
![Page 38: Ruby on Rails (VERSAO COM LAYOUT CONSERTADO)](https://reader034.vdocuments.pub/reader034/viewer/2022051817/5485b054b47959dd0c8b4f0e/html5/thumbnails/38.jpg)
● ScaffoldingScaffolding
Mão na massa
Rotas geradas Rotas geradas
Switter::Application.routes.draw do get 'paginas/inicio' resources :usuarios resources :micropostsend
config/routes.rbconfig/routes.rb
![Page 39: Ruby on Rails (VERSAO COM LAYOUT CONSERTADO)](https://reader034.vdocuments.pub/reader034/viewer/2022051817/5485b054b47959dd0c8b4f0e/html5/thumbnails/39.jpg)
● MigrationsMigrations
Mão na massa
$ rake db:migrate
![Page 40: Ruby on Rails (VERSAO COM LAYOUT CONSERTADO)](https://reader034.vdocuments.pub/reader034/viewer/2022051817/5485b054b47959dd0c8b4f0e/html5/thumbnails/40.jpg)
● RakeRake
Mão na massa
● Executar tarefas● Funciona como o Make, Ant, etc...● Utilizado para gerenciar banco de dados, rodar testes, e o que
mais for preciso● Executar tarefas personalizadas
$ rake tasks
![Page 41: Ruby on Rails (VERSAO COM LAYOUT CONSERTADO)](https://reader034.vdocuments.pub/reader034/viewer/2022051817/5485b054b47959dd0c8b4f0e/html5/thumbnails/41.jpg)
● ScaffoldingScaffolding
Mão na massa
![Page 42: Ruby on Rails (VERSAO COM LAYOUT CONSERTADO)](https://reader034.vdocuments.pub/reader034/viewer/2022051817/5485b054b47959dd0c8b4f0e/html5/thumbnails/42.jpg)
● ScaffoldingScaffolding
Mão na massa
![Page 43: Ruby on Rails (VERSAO COM LAYOUT CONSERTADO)](https://reader034.vdocuments.pub/reader034/viewer/2022051817/5485b054b47959dd0c8b4f0e/html5/thumbnails/43.jpg)
● Scaffolding é bom porque...Scaffolding é bom porque...
Mão na massa
● É rapido● Mostra como o Rails funciona● Usa padrões que usaremos no dia-a-dia
![Page 44: Ruby on Rails (VERSAO COM LAYOUT CONSERTADO)](https://reader034.vdocuments.pub/reader034/viewer/2022051817/5485b054b47959dd0c8b4f0e/html5/thumbnails/44.jpg)
● Scaffolding é ruim porque...Scaffolding é ruim porque...
Mão na massa
● O código não é otimizado● Pode adicionar mais código do que venhamos precisar ● É muito simplório (uma tabela, sem possibilidades de gerar
relacionamentos automaticamente)
Profissionais da área não utilizam esta técnica em ambiente de produção.Profissionais da área não utilizam esta técnica em ambiente de produção.
![Page 45: Ruby on Rails (VERSAO COM LAYOUT CONSERTADO)](https://reader034.vdocuments.pub/reader034/viewer/2022051817/5485b054b47959dd0c8b4f0e/html5/thumbnails/45.jpg)
● ActiveRecordActiveRecord
Mão na massa
● Biblioteca ORM que encapsula as tabelas do banco de dados como objetos
● Utiliza o poder do Ruby de gerar código (metaprogramação)
![Page 46: Ruby on Rails (VERSAO COM LAYOUT CONSERTADO)](https://reader034.vdocuments.pub/reader034/viewer/2022051817/5485b054b47959dd0c8b4f0e/html5/thumbnails/46.jpg)
● ActiveRecord InterativoActiveRecord Interativo
Mão na massa
Os exemplos a seguir podem ser testados por meio do Os exemplos a seguir podem ser testados por meio do rails consolerails console, que , que ppode ser executado de duas maneiras:ode ser executado de duas maneiras:
$ rails console
$ rails console sandbox
Com o parâmetro Com o parâmetro sandboxsandbox ativado, toda ativado, toda mudança no banco de dados será mudança no banco de dados será desfeita após a saída do console.desfeita após a saída do console.
* utilizar o comando exit para sair do console.* utilizar o comando exit para sair do console.
![Page 47: Ruby on Rails (VERSAO COM LAYOUT CONSERTADO)](https://reader034.vdocuments.pub/reader034/viewer/2022051817/5485b054b47959dd0c8b4f0e/html5/thumbnails/47.jpg)
● ActiveRecord InterativoActiveRecord Interativo
Mão na massa
matz=Usuario.new({:nome => 'Yukihiro', :email => '[email protected]'})
matz.save
Criar um usuário:Criar um usuário:
matz = Usuario.where({:nome => 'Yukihiro'})Selecionar usuário:Selecionar usuário:
matz.nome = 'Yukihiro Matsumoto' matz.save
Alterar usuário:Alterar usuário:
Usuario.find(1).destroy
Deletar usuário:Deletar usuário:
![Page 48: Ruby on Rails (VERSAO COM LAYOUT CONSERTADO)](https://reader034.vdocuments.pub/reader034/viewer/2022051817/5485b054b47959dd0c8b4f0e/html5/thumbnails/48.jpg)
● RelacionamentoRelacionamento
Mão na massa
Como vimos no início, um usuário possui vários microposts e um Como vimos no início, um usuário possui vários microposts e um micropost pertence a apenas um usuário. micropost pertence a apenas um usuário.
Entidades
![Page 49: Ruby on Rails (VERSAO COM LAYOUT CONSERTADO)](https://reader034.vdocuments.pub/reader034/viewer/2022051817/5485b054b47959dd0c8b4f0e/html5/thumbnails/49.jpg)
● RelacionamentoRelacionamento
Mão na massa
class Usuario < ActiveRecord::Basehas_many :microposts
end
app/models/usuario.rbapp/models/usuario.rb
class Micropost < ActiveRecord::Basebelongs_to :usuario
end
app/models/micropost.rbapp/models/micropost.rb
Com isso, é gerado, via metaprogramação, o método Com isso, é gerado, via metaprogramação, o método usuariousuario na instância da na instância da classe Micropost e o método classe Micropost e o método microposts microposts na instância da classe Usuario.na instância da classe Usuario.
![Page 50: Ruby on Rails (VERSAO COM LAYOUT CONSERTADO)](https://reader034.vdocuments.pub/reader034/viewer/2022051817/5485b054b47959dd0c8b4f0e/html5/thumbnails/50.jpg)
● Relacionamento (console)Relacionamento (console)
Mão na massa
# seleciona o último usuario inserido no BD usuario = Usuario.last # e atribui a variavel todos seus microposts microposts = usuario.microposts
Listar todos os microposts de um determinado usuário:Listar todos os microposts de um determinado usuário:
matz = Usuario.where :nome => 'Yukihiro Matsumoto'micropost = Micropost.newmicropost.conteudo = 'Eu sou o criador do Ruby!'micropost.usuario = matzmicropost.save# imprime Yukihiro Matsumotoputs micropost.usuario.nome
Cria um micropost e o atribui a um usuário:Cria um micropost e o atribui a um usuário:
![Page 51: Ruby on Rails (VERSAO COM LAYOUT CONSERTADO)](https://reader034.vdocuments.pub/reader034/viewer/2022051817/5485b054b47959dd0c8b4f0e/html5/thumbnails/51.jpg)
● Relacionamento (views)Relacionamento (views)
Mão na massa
...<tr> <td><%= micropost.usuario_id %></td> <td><%= micropost.conteudo %></td>...
app/views/microposts/index.html.erb app/views/microposts/index.html.erb gerado pelo scaffold.gerado pelo scaffold.
...<tr> <td><%= micropost.usuario.nome %></td> <td><%= micropost.conteudo %></td>...
app/views/microposts/index.html.erb app/views/microposts/index.html.erb modificado.modificado.
![Page 52: Ruby on Rails (VERSAO COM LAYOUT CONSERTADO)](https://reader034.vdocuments.pub/reader034/viewer/2022051817/5485b054b47959dd0c8b4f0e/html5/thumbnails/52.jpg)
● Relacionamento (views)Relacionamento (views)
Mão na massa
![Page 53: Ruby on Rails (VERSAO COM LAYOUT CONSERTADO)](https://reader034.vdocuments.pub/reader034/viewer/2022051817/5485b054b47959dd0c8b4f0e/html5/thumbnails/53.jpg)
● Relacionamento (views)Relacionamento (views)
Mão na massa
... <div class="field"> <%= f.label :usuario_id %><br /> <%= f.text_field :usuario_id %>...
app/views/microposts/_form.html.erb app/views/microposts/_form.html.erb gerado pelo scaffold.gerado pelo scaffold.
... <div class="field"> <%= f.label :usuario_id %><br /> <%= f.collection_select :usuario_id,
Usuario.all, :id, :nome %>...
app/views/microposts/_form.html.erb app/views/microposts/_form.html.erb modificado.modificado.
![Page 54: Ruby on Rails (VERSAO COM LAYOUT CONSERTADO)](https://reader034.vdocuments.pub/reader034/viewer/2022051817/5485b054b47959dd0c8b4f0e/html5/thumbnails/54.jpg)
● Relacionamento (views)Relacionamento (views)
Mão na massa
![Page 55: Ruby on Rails (VERSAO COM LAYOUT CONSERTADO)](https://reader034.vdocuments.pub/reader034/viewer/2022051817/5485b054b47959dd0c8b4f0e/html5/thumbnails/55.jpg)
● ValidaValidaçõesções
Mão na massa
class Usuario < ActiveRecord::Basehas_many :microposts, :dependent => :destroyvalidates_presence_of :nome, :emailvalidates_uniqueness_of :email
end
app/models/usuario.rbapp/models/usuario.rb
![Page 56: Ruby on Rails (VERSAO COM LAYOUT CONSERTADO)](https://reader034.vdocuments.pub/reader034/viewer/2022051817/5485b054b47959dd0c8b4f0e/html5/thumbnails/56.jpg)
● ValidaValidaçõesções
Mão na massa
![Page 57: Ruby on Rails (VERSAO COM LAYOUT CONSERTADO)](https://reader034.vdocuments.pub/reader034/viewer/2022051817/5485b054b47959dd0c8b4f0e/html5/thumbnails/57.jpg)
● ValidaValidaçõesções
Mão na massa
class Micropost < ActiveRecord::Basebelongs_to :usuariovalidates_presence_of :conteudovalidates_length_of :conteudo, :maximum => 140
end
app/models/micropost.rbapp/models/micropost.rb
class Micropost < ActiveRecord::Basebelongs_to :usuariovalidates :conteudo,
:presence => true, :length => {:maximum => 140}
end
OUOU
![Page 58: Ruby on Rails (VERSAO COM LAYOUT CONSERTADO)](https://reader034.vdocuments.pub/reader034/viewer/2022051817/5485b054b47959dd0c8b4f0e/html5/thumbnails/58.jpg)
● ValidaValidaçõesções
Mão na massa
![Page 59: Ruby on Rails (VERSAO COM LAYOUT CONSERTADO)](https://reader034.vdocuments.pub/reader034/viewer/2022051817/5485b054b47959dd0c8b4f0e/html5/thumbnails/59.jpg)
● GemsGems
Mão na massa
● Gerenciador de pacotes do Ruby● Facilita distribuicão de códigos● Age como o apt-get (derivados do Debian)● No Rails as gems podem ser adicionadas no arquivo Gemfile
![Page 60: Ruby on Rails (VERSAO COM LAYOUT CONSERTADO)](https://reader034.vdocuments.pub/reader034/viewer/2022051817/5485b054b47959dd0c8b4f0e/html5/thumbnails/60.jpg)
O que vimos até agoraO que vimos até agora
● Brevemente aspectos principais da sintaxe RubyBrevemente aspectos principais da sintaxe Ruby
● Principais características do RailsPrincipais características do Rails
● Como criar uma aplicacãoComo criar uma aplicacão
● Criar controller e actionsCriar controller e actions
● LayoutsLayouts
● ScaffoldingScaffolding
● Active RecordActive Record
● ValidacõesValidacões
● GemsGems
![Page 61: Ruby on Rails (VERSAO COM LAYOUT CONSERTADO)](https://reader034.vdocuments.pub/reader034/viewer/2022051817/5485b054b47959dd0c8b4f0e/html5/thumbnails/61.jpg)
Próximos passosPróximos passos
● Aprender mais!Aprender mais!● www.ruby-br.orgwww.ruby-br.org ● www.rubyonrails.com.brwww.rubyonrails.com.br● www.akitaonrails.comwww.akitaonrails.com● www.ruby.railstutorial.org/ruby-on-rails-tutorial-bookwww.ruby.railstutorial.org/ruby-on-rails-tutorial-book
(em inglês)(em inglês)
![Page 62: Ruby on Rails (VERSAO COM LAYOUT CONSERTADO)](https://reader034.vdocuments.pub/reader034/viewer/2022051817/5485b054b47959dd0c8b4f0e/html5/thumbnails/62.jpg)
PERGUNTAS ???PERGUNTAS ???
● Podem me escrever diretamentePodem me escrever diretamente● [email protected]@gmail.com