Exemplo em Rails – parte 2

Rails-2_Agenda_Mequetrefe

Relembrando que na primeira parte foi criado um projeto, a “AM”, criado um modelo, dois controladores, seguindo as regras do Rails para ser facilmente localizado em outros idiomas e, claro, com o Git deixado para tomar conta de tudo.

Sendo assim, de volta ao desenvolvimento da “Agenda Mequetrefe” acrescentando a inserção de registros e algumas outras coisas… 🙂

Um pouco de teoria

Antes de prosseguir um pouco mais de teoria, com dois termos que ajudarão a entender o que está acontecendo.

O primeiro deles é o CRUD que é o acrônimo para “create — retrieve — update — delete” e que diz respeito às quatro operações básicas de uma aplicação que armazena informações em um banco de dados.

Outro é o REST que apesar de ser o acrônimo para algo aparentemente críptico, “representation state transfer”, significa tão somente que a estrutura do software que o suporta é escrita para que a passagem de parâmetros mimetize o funcionamento do protocolo HTTP.

Mas por qual motivo fiz esta introdução? Já explico.

Um pouco de prática

Precisava citar que os dois sujeitos existem antes de contar que quando usei o “rails g scaffold …” o próprio Rails se encarregou de criar toda a estrutura e arquivos necessários para prover o CRUD e implementando-o através de REST. Isto significa que a aplicação já estava “pronta” desde a primeira parte? Em tese sim, ou melhor, ao menos a parte mais chata e repetitiva dela.

Inserção (“create”)

Rails-2_Create

Está acessível a partir de 127.0.0.1:3000/contacts/new e correspondendo ao arquivo “./app/views/contacts/new.html.erb”.

Visualização (“retrieve”)

Rails-2_Retrieve

Este é acessado em 127.0.0.1:3000/contacts/«valor» com a passagem do parâmetro (“valor”) para identificar o ID registro no banco de dados. Ele corresponde ao arquivo “./app/views/contacts/show.html.erb”.

Atualização (“update”)

Rails-2_Update

Disponível em 127.0.0.1:3000/contacts/«valor»/edit, correspondendo ao arquivo “./app/views/contacts/edit.html.erb” e assim como na visualização o “valor” é o ID do registro no banco.

Remoção (“delete”)

Rails-2_Delete

Este sujeito não possui uma arquivo equivalente na visão e utiliza a infraestrutura do Rails para enviar, via REST (com o método DELETE), a informação sobre qual registro o controlador de “contacts” deverá remover.

Aliás, todos eles também possuem em “./app/contollers/contacts_controller.rb” as partes encarregadas de tratar corretamente as outras funções do CRUD.

Sendo assim “basta” editar estes arquivos e deixá-los do “nosso jeito” para terminar a aplicação? Sim!

Antes de começar

Como ainda não quero perder os arquivos que foram criados originalmente pelo Rails fiz uma pequena “manobra” com o Git:

$ cd AM
$ git branch parte2
$ git checkout parte2
$ git branch
  master
* parte2

Com isto crio um novo ramo (“branch”), o parte2. Se for necessário é possível voltar ao ramo master sem necessariamente perder alterações realizadas ou mesmo ficar fazendo cópias dos arquivos.

E antes de mexer especificamente no pessoal encarregado do CRUD é bom corrigir o código que já existe para utilizá-los.

Página inicial

Retirei o trecho de código que produz a listagem da agenda dentro de “./app/views/home/index.html.erb” e a coloquei em “./app/views/contacts/index.html.erb” — faz mais sentido ela estar lá. — e para não deixar “./app/views/home/index.html.erb” vazio coloquei algo para preencher o espaço pegando do meu estoque particular.

Rails-2_Pagina_inicial

Também aproveitei para acrescentar algum conteúdo dentro do arquivo “./app/views/_footer.html.erb” que tinha sido deixado vazio.

Barra de navegação

As opções da barra de navegação exibem as opções disponíveis mas também precisam direcionar o usuário para elas. O arquivo “./app/views/home/_navigation.html.erb” então ficou:

O link_to que substituiu os “<a href=’…’> … </a>” é  um helper e o propósito deles no Rails é ser usado nas tarefas repetitivas¹ evitando a repetição de código. Neste caso, está me poupando de escrever a tag de âncora do HTML diversas vezes.

Neste exemplo basta informar o texto e o endereço a utilizar, enquanto que “root_path”, “contacts_path”, “new_contact_path” e “about_path” são simplesmente variáveis dentro do próprio Rails que apontam para a correta URL que desejamos usar.

(¹) Claro que você pode criar os próprios helpers da sua aplicação, veja a estrutura em “./app/helpers”.

A opção do “Sobre”

Para que a opção “Sobre” funcione é importante contar ao Rails que ela existe. Ou seja, criar uma rota em “./config/routes.rb”:

get 'about' => 'home#about'

O respectivo arquivo em “./app/views/home/about.html.erb” e algum conteúdo:

Sim, estava sem imaginação para escrever algo nesta página. 😀

A lista de contatos

Como movi o código responsável em exibir a lista dos contatos para outro arquivo eu aproveitei também para mexer um pouco nele, acrescentando as funcionalidades do CRUD e mexendo um pouco na parte visual.

O arquivo “./app/viewers/contacts/index.html.erb” ficou assim:

Foram incluídas as opções para criação (C) de um novo contato e as de visualização (R), edição (U) e remoção (D) dos já existentes. Também aproveitei para usar os Glyphicons e botões do Bootstrap e o resultado final ficou assim:

Rails-2_Lista_de_Contatos

E a aplicação está pronta, ou quase, ainda falta editar os demais arquivos das visões dentro de “contacts” para corrigir idioma e o leiaute mas ela  já se encontra funcional.

Fim desta parte

Como eu resolvi que vou mexer no modelo e acrescentar mais campos à agenda, deixarei a edição do resto do CRUD para a terceira parte.

Então é hora de finalizar o servidor HTTP do Rails e salvar as alterações no repositório:

$ git add .
$ git commit -m "end of second part"
[parte2 91d5daf] end of second part
 10 files changed, 82 insertions(+), 65 deletions(-)
...

Até a terceira parte! 🙂

Anúncios

2 comentários sobre “Exemplo em Rails – parte 2

  1. Pingback: Exemplo em Rails – Agenda, parte 2 - Peguei do

  2. Pingback: Exemplo em Rails – parte 3 | giovannireisnunes

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s