Programação Web Aula 8 - Rails (Introdução) · MVC Rails Básico Rails - As partes...

21

Transcript of Programação Web Aula 8 - Rails (Introdução) · MVC Rails Básico Rails - As partes...

Page 1: Programação Web Aula 8 - Rails (Introdução) · MVC Rails Básico Rails - As partes Programação Web Aula 8 - Rails (Introdução) Bruno Müller Junior Departamento de Informática

MVC Rails Básico Rails - As partes

Programação WebAula 8 - Rails (Introdução)

Bruno Müller Junior

Departamento de Informática

UFPR

7 de Abril de 2014

Bruno Müller Junior Departamento de Informática UFPR

Programação Web Aula 8 - Rails (Introdução)

Page 2: Programação Web Aula 8 - Rails (Introdução) · MVC Rails Básico Rails - As partes Programação Web Aula 8 - Rails (Introdução) Bruno Müller Junior Departamento de Informática

MVC Rails Básico Rails - As partes

1 Rails BásicoMágicaPrincípiosCaracterísticasCriando uma aplicação

Levantando o ServidorExaminando o diretório padrão

2 Rails - As partesControlador

Analisando o funcionamentoMudando de uma controller#view para outro

ModelosCriando um modeloDesvendando o Mistério: (1) O modeloDesvendando o Mistério: (2) O Controlador

Desvendando o Mistério: (4) As variáveisDesvendando o Mistério: (4) As variáveis

Bruno Müller Junior Departamento de Informática UFPR

Programação Web Aula 8 - Rails (Introdução)

Page 3: Programação Web Aula 8 - Rails (Introdução) · MVC Rails Básico Rails - As partes Programação Web Aula 8 - Rails (Introdução) Bruno Müller Junior Departamento de Informática

MVC Rails Básico Rails - As partes

MVC

MVC = Model-View-Controller

Trygave Reensraug, 1978-1979, Smalltalk.

Ele observou que em um mesmo arquivo fonte, havia códigopara:

a interação com o usuário (view);acesso e consistência a dados (model);�uxo de execução (controller).

Isto di�cultava manutenção (componentes muito conexos).

Solução encontrada: dividir física e logicamente estas trêspartes.

o termo framework MVC refere-se a aplicativos dedesenvolvimento que atendem a especi�cação acima.

Bruno Müller Junior Departamento de Informática UFPR

Programação Web Aula 8 - Rails (Introdução)

Page 4: Programação Web Aula 8 - Rails (Introdução) · MVC Rails Básico Rails - As partes Programação Web Aula 8 - Rails (Introdução) Bruno Müller Junior Departamento de Informática

MVC Rails Básico Rails - As partes

Rails Básico

Grande parte das ferramentas de desenvolvimento web usaalgum MVC. Rails é um destes.�Ciclo de interação com o usuário�:

o usuário interage com o navegador, enviando uma requisiçãoao servidor.o controlador capta esta requisição, consulta o modelo, erenderiza um novo documento que é enviado de volta.

Bruno Müller Junior Departamento de Informática UFPR

Programação Web Aula 8 - Rails (Introdução)

Page 5: Programação Web Aula 8 - Rails (Introdução) · MVC Rails Básico Rails - As partes Programação Web Aula 8 - Rails (Introdução) Bruno Müller Junior Departamento de Informática

MVC Rails Básico Rails - As partes

Mágica

Mágica

O framework Rails faz muitas coisas �automagicamente� para odesenvolvedor. Isto ajuda só depois de saber a �mágica�.

Cria classes de controlador;

Conecta os métodos do controlador às respectivas views;

Provê a interface básica para lidar com o banco de dados;

Cria classes e bd para o modelo;utiliza convenções de nome para conectar modelo, controladore views implicitamente.

por exemplo: o controlador pode detectar valores nos dadosdos form, colocá-las em variáveis de instância que �camimplicitamente disponíveis para o código Ruby.

facilita a criação de layouts;

contém ambiente(s) de testes;

Bruno Müller Junior Departamento de Informática UFPR

Programação Web Aula 8 - Rails (Introdução)

Page 6: Programação Web Aula 8 - Rails (Introdução) · MVC Rails Básico Rails - As partes Programação Web Aula 8 - Rails (Introdução) Bruno Müller Junior Departamento de Informática

MVC Rails Básico Rails - As partes

Princípios

Princípios

DRY (Don't Repeat Yourself)

Cada elemento de informação deve aparecer uma única vez(minimiza memória).Com isto, alteraçõs ao código são altamente localizadas.

Convention over Con�guration

A maior parte da interação entre as partes é implícita, eestabelecida por convenções e não por arquivos decon�guração. Exemplo: nome da classe e nome da tabela.

Paradigma Agile Development

Desenvolvimento rápido ao invés de criação de documentoselaborados que culminam no aplicativo.Abordagem incremental.

Bruno Müller Junior Departamento de Informática UFPR

Programação Web Aula 8 - Rails (Introdução)

Page 7: Programação Web Aula 8 - Rails (Introdução) · MVC Rails Básico Rails - As partes Programação Web Aula 8 - Rails (Introdução) Bruno Müller Junior Departamento de Informática

MVC Rails Básico Rails - As partes

Características

Características

Diferente de muitos outros frameworks, Rails não usainterfaces grá�cas, mas linhas de comando.

Desenvolvido especi�camente para desenvolver aplicações Webque usam banco de dados relacional.

Bibliogra�a:

Existe MUITO material na Web e em livros;A abordagem é muito parecida, e repletos de mágica. Istodi�culta a compreensão do núcleo do framework, poisconcentra-se nas �beiradas�.Nossa abordagem explica o funcionamento do framework.

Bruno Müller Junior Departamento de Informática UFPR

Programação Web Aula 8 - Rails (Introdução)

Page 8: Programação Web Aula 8 - Rails (Introdução) · MVC Rails Básico Rails - As partes Programação Web Aula 8 - Rails (Introdução) Bruno Müller Junior Departamento de Informática

MVC Rails Básico Rails - As partes

Criando uma aplicação

Criando uma aplicação

Para criar uma aplicação, usa-se a linha de comando:

Para criar a raiz de uma aplicação rails:> rails new Exemplo �skip-bundle;

o �skip-bundle pede para não executar o programa bundle,responsável por incluir as �gemas�.

Isto criar um diretório com o nome Teste.

Atualize as �gemas�

Veja seus subdiretórios e as �gemas�> cd Teste> bundle install --local> ls -l> less Gemfile

Bruno Müller Junior Departamento de Informática UFPR

Programação Web Aula 8 - Rails (Introdução)

Page 9: Programação Web Aula 8 - Rails (Introdução) · MVC Rails Básico Rails - As partes Programação Web Aula 8 - Rails (Introdução) Bruno Müller Junior Departamento de Informática

MVC Rails Básico Rails - As partes

Levantando o Servidor

Levantando o Servidor

O diretório Teste é a raiz da aplicação que já pode respondera uma requisição Web.

A partir da raiz, �levantamos� o servidor:> rails server

Observe que o comando rails foi usado com outro parâmetro(server no lugar de new). Vão aparecer muitos outros ainda.

A porta padrão é 3000, mas outra pode ser usada com-p<porta>

O servidor foi levantado e como não temos nenhum modelo ouview especi�cado, a resposta padrão será renderizada.

Bruno Müller Junior Departamento de Informática UFPR

Programação Web Aula 8 - Rails (Introdução)

Page 10: Programação Web Aula 8 - Rails (Introdução) · MVC Rails Básico Rails - As partes Programação Web Aula 8 - Rails (Introdução) Bruno Müller Junior Departamento de Informática

MVC Rails Básico Rails - As partes

Examinando o diretório padrão

Examinando o diretório padrão

Inicialmente vamos nos concentrar somente no diretório app,cujos subdiretórios incluem models, views e controllers.

Normalmente, <navegador> localhost:3000 resolve.

A litorina é máquina de estudos, e não tem navegadorinstalado. Tem de abrir navegador em outra máquina do dinf eabrir a url litorina:3000 (com o servidor levantado, claro)

Bruno Müller Junior Departamento de Informática UFPR

Programação Web Aula 8 - Rails (Introdução)

Page 11: Programação Web Aula 8 - Rails (Introdução) · MVC Rails Básico Rails - As partes Programação Web Aula 8 - Rails (Introdução) Bruno Müller Junior Departamento de Informática

MVC Rails Básico Rails - As partes

Rails - As partes

Os próximos slides mostram a criação de uma aplicação Rails.

Baseia-se no livro Agile Web Development with Rails 4

A diferença aqui é vamos nos concetrar em entender como aspartes MVC interagem, e não no deslumbramento dasfacilidades que ele traz.

Para as próximas transparências, tenha em mente a �gura abaixo:

Bruno Müller Junior Departamento de Informática UFPR

Programação Web Aula 8 - Rails (Introdução)

Page 12: Programação Web Aula 8 - Rails (Introdução) · MVC Rails Básico Rails - As partes Programação Web Aula 8 - Rails (Introdução) Bruno Müller Junior Departamento de Informática

MVC Rails Básico Rails - As partes

Controlador

Controlador

Sua função é receber requisições, interagir com o BD erenderizar as páginas de resposta.

Criação de um controlador> rails generate controller Say hello goodbye

Este comando cria vários arquivos, dentre os quaisdestacamos:

app/controllers/say_controller.rb

app/views/say

app/views/say/hello.html.erb

config/routes (altera).

Bruno Müller Junior Departamento de Informática UFPR

Programação Web Aula 8 - Rails (Introdução)

Page 13: Programação Web Aula 8 - Rails (Introdução) · MVC Rails Básico Rails - As partes Programação Web Aula 8 - Rails (Introdução) Bruno Müller Junior Departamento de Informática

MVC Rails Básico Rails - As partes

Analisando o funcionamento

Analisando o funcionamento

isto cria a url /say/hello e /say/goodbye.

veri�car o app/controllers/say_controller.rb.

veri�car o diretório app/views/say/.

veri�car o config/routes.rb + comando rake routes (a�cola� ou �mágica� que liga controlador à view).

controlador é usado para acessar BD (ou informaçõesexternas);

view é usada para mostrar estas informações.

incluir @time = Time.now no controlador hello;

<%= @time %> na view hello.

A �vida� de uma variável de instância é de somente umainteração.

Bruno Müller Junior Departamento de Informática UFPR

Programação Web Aula 8 - Rails (Introdução)

Page 14: Programação Web Aula 8 - Rails (Introdução) · MVC Rails Básico Rails - As partes Programação Web Aula 8 - Rails (Introdução) Bruno Müller Junior Departamento de Informática

MVC Rails Básico Rails - As partes

Mudando de uma controller#view para outro

Mudando de uma controller#view para outro

Compare a view �say/hello� com o arquivo �hello.html.erb�.

O primeiro, só html. O segundo permite incluir comandos rubycom <%= <comando ruby> %>.

Alguns comandos ruby são chamados helper methods.

Alguns destes são �geradores� para HTML.

Exemplo: <%= link_to "Goodbye", say_goodbye_path %>

Existem vários helper methods padrão. Veja alguns emhttp://api.rubyonrails.org/classes/ActionView/

Helpers/UrlHelper.html

Con�ra o mapeamento (e outras formas de chamar - linkacima)

Bruno Müller Junior Departamento de Informática UFPR

Programação Web Aula 8 - Rails (Introdução)

Page 15: Programação Web Aula 8 - Rails (Introdução) · MVC Rails Básico Rails - As partes Programação Web Aula 8 - Rails (Introdução) Bruno Müller Junior Departamento de Informática

MVC Rails Básico Rails - As partes

Modelos

Modelos

Sua função é interagir com os dados. Não só buscar no BD,mas também fazer consistências.Para este exemplo, criaremos outra aplicação, e a criação deum modelo é através do comando

> rails new depot> cd depot> rails generate scaffold <Tabela> <atributos>

Ele também cria as view básicas para visualizar, incluir, excluire alterar.

Ele não cria a tabela, mas sim cria o �schema�. Para criar atabela, é necessário executar o comando rake db:migrate.

Bruno Müller Junior Departamento de Informática UFPR

Programação Web Aula 8 - Rails (Introdução)

Page 16: Programação Web Aula 8 - Rails (Introdução) · MVC Rails Básico Rails - As partes Programação Web Aula 8 - Rails (Introdução) Bruno Müller Junior Departamento de Informática

MVC Rails Básico Rails - As partes

Criando um modelo

Criando um modelo

Criar a tabela �products�, com três atributos:>rails generate scaffold Product title:string description:text \image_url:string price:decimal

xaEste comando cria um monte de arquivos. Iremos abordarsomente alguns.Um arquivo importante é criada a �migração�, ou seja, um�schema� de criação desta tabela e seus atributos.con�ra no diretório db/migrate, com um timestamp.O programador pode alterar características dos atributos lá edepois criar a tabela com o comando rake db:migrate.Também pode voltar atrás e desfazer a tabela com rake

db:rollback.Ao levantar o servidor, tudo funciona.

Bruno Müller Junior Departamento de Informática UFPR

Programação Web Aula 8 - Rails (Introdução)

Page 17: Programação Web Aula 8 - Rails (Introdução) · MVC Rails Básico Rails - As partes Programação Web Aula 8 - Rails (Introdução) Bruno Müller Junior Departamento de Informática

MVC Rails Básico Rails - As partes

Desvendando o Mistério: (1) O modelo

Desvendando o Mistério: (1) O modelo

Há uma padronização de nomes entre classes e tabelas.

O diretório app/models contém o arquivo �product.rb�.Este arquivo contém a classe Product.Como a migração criou a tabela products, todos os atributosda tabela são mapeados para a classe implicitamente.

Bruno Müller Junior Departamento de Informática UFPR

Programação Web Aula 8 - Rails (Introdução)

Page 18: Programação Web Aula 8 - Rails (Introdução) · MVC Rails Básico Rails - As partes Programação Web Aula 8 - Rails (Introdução) Bruno Müller Junior Departamento de Informática

MVC Rails Básico Rails - As partes

Desvendando o Mistério: (2) O Controlador

Desvendando o Mistério: (2) O Controlador

O controlador deve ler a tabela e mapear os atributos parauma variável de instância, no caso, @products ou @product

dependendo da url.

Para entender como,

rake routes

Veja o arquivoapp/controllers/products_controller.rb.Por �m, observe as urls de cada requisição.

Bruno Müller Junior Departamento de Informática UFPR

Programação Web Aula 8 - Rails (Introdução)

Page 19: Programação Web Aula 8 - Rails (Introdução) · MVC Rails Básico Rails - As partes Programação Web Aula 8 - Rails (Introdução) Bruno Müller Junior Departamento de Informática

MVC Rails Básico Rails - As partes

Desvendando o Mistério: (3) As Views

Desvendando o Mistério: (3) As Views

As view criadas estão no diretórioapp/views/<controlador>/.

Neste caso, app/views/products/?> lsedit.html.erb index.html.erb new.html.erb show.json.jbuilder_form.html.erb index.json.jbuilder show.html.erb

Cada uma delas é acessada com url diferente. Con�ra comrake routes.

Bruno Müller Junior Departamento de Informática UFPR

Programação Web Aula 8 - Rails (Introdução)

Page 20: Programação Web Aula 8 - Rails (Introdução) · MVC Rails Básico Rails - As partes Programação Web Aula 8 - Rails (Introdução) Bruno Müller Junior Departamento de Informática

MVC Rails Básico Rails - As partes

Desvendando o Mistério: (4) As variáveis

Desvendando o Mistério: (4) As variáveis

Primeiro, como as variáveis são usadas para gerar páginasdinâmicas.

Considere a página gerada com index.

Controller carrega todos os produtos no método index. Nestecaso, @products = Product.all.

View: a variável products é usada em comandos ruby (entre<% ... %>).

Já a página gerada com show tem um truque:usa um mesmo método (set_product para aplicar @product= Product.find(params[:id]).Após a de�nição da classe, tembefore_action :set_product, only: [:show, :edit,

:update, :destroy]

Bruno Müller Junior Departamento de Informática UFPR

Programação Web Aula 8 - Rails (Introdução)

Page 21: Programação Web Aula 8 - Rails (Introdução) · MVC Rails Básico Rails - As partes Programação Web Aula 8 - Rails (Introdução) Bruno Müller Junior Departamento de Informática

MVC Rails Básico Rails - As partes

Desvendando o Mistério: (4) As variáveis

Desvendando o Mistério: (4) As variáveis

A pergunta que não quer calar: de onde veio o parâmetro id?

Em rails, os parâmetros são armazenados na hash params docontrolador (não é visível fora do controlador). Independe seveio como POST ou GET.

Outro caso é um novo produto:

Veja o fonte da página de new.O campo de título: name="product[title]".O botão de criação dispara o método create no controlador.Este, por sua vez usa product_params (um atalho para todosos campos de params).http://guides.rubyonrails.org/action_controller_

overview.html#parameters

Bruno Müller Junior Departamento de Informática UFPR

Programação Web Aula 8 - Rails (Introdução)