Tutorial Rails 3 Part.2: Controller, RESTful e scaffold.

Vamos dar continuidade ao nosso tutorial sobre Rails 3, se você não leu a primeira parte clique aqui.

Hoje nós faremos algumas customizações na parte visual do nosso sistema para deixá-lo mais amigável. Mas antes temos que conhecer um pouco mais sobre a estrutura do Rails.

Quando usamos o scaffold, o Rails criou automaticamente uma estrutura composta por um conceito chamado de REST, que determina que um model deve ser composto por 7 ações básicas. Estas ações podem ser visulizadas no arquivo de controller. O controler é responsável por fazer a interface entre as views e os models na arquitetura MVC, realizando o processamento das requisições vindas do navegador web.

Os controllers ficam localizados na pasta app/controller/, e por uma convenção da framework, o nome dos controllers que estiverem vinculados a um model sempre deve estar no plural, diferente dos models que devem estar no singular. Mais adiante veremos neste como criar um controller independentemente de um model.

Vamos abrir um arquivo de controller que já criamos para visualizar a sua estrutura:

app/controller/centro_de_custos_controller.rb


class CentroDeCustosController < ApplicationController

 def index
  ...
 end

 def show
  ...
 end

 def new
  ...
 end

 def edit
  ...
 end

 def create
  ...
 end

 def update
  ...
 end

 def destroy
  ...
 end
end

Notamos que a classe CentroDeCustosController possui 7 métodos, na estrutura do Rails nós podemos chamar esses métodos de actions, pois eles representam de certa forma ações relacionadas ao model:

index : Responsável por visualizar todos os elementos de um model, é a action padrão do controller. Portanto quando acessamos a url http://localhost:3000/nome_do_controller/, na verdade estamos acessando esta action.

show: Responsável por visualizar um elemento específico determinado por um ID, a url funciona desta forma: http://localhost:3000/nome_do_controller/id_do_elemento

new: Formulário de cadastro de um novo redgistro, a url fica desta forma: http://localhost:3000/nome_do_controller/new

edit: Formulário de edição de um registro, acessado desta forma: http://localhost:3000/nome_do_controller/edit/id_do_elemento

Cada uma destas actions possuem um arquivo de visualização correspondente na pasta app/views/nome_do_controller, as views são responsáveis por exibir o conteúdo de forma amigável para o usuário final. Nela podemos utilizar tags html, css, javascript, flash etc.

Lista de relação entre as actions do controller e os arquivos da view.

Action — View

index — app/views/nome_do_controller/index.html.erb

show — app/views/nome_do_controller/show.html.erb

new — app/views/nome_do_controller/new.html.erb

new — app/views/nome_do_controller/edit.html.erb

Porém, para o RESTful nem todas as actions precisam de uma view, pois elas apenas executam uma tarefa requisitada por uma outra action e depois enviam uma mensagem de confirmação de execussão, é o caso das actions:

create — executa a tarefa solicitada pela action new — manda uma mensagem de confirmação para a view show.

update — executa a tarefa solicitada pela action edit — manda uma mensagem de confirmação para a view show.

destroy — executar a tarefa solicitada pela na view index quando um usuário clica na opção de destroir alguma elemento — manda uma mensagem de confirmação para a view index.

Há uma questão técnica interessante relacionadas ao método de requisição quando nós trabalhamos com RESTful no Rails. Para quem já está familiarizado com o desenvolvimento web, sabe o que são requisições do tipo GET ou POST, o Rails utiliza estas e outras duas PUT e DELETE.

Action — Tipo de Requisição

index — GET

new — GET

edit — GET

show — GET

create — POST

update — PUT

destroy — DELETE

Uma forma de visualizar toda essa estrutura é executando o seguinte comando na diretório da sua aplicação:


rake routes

Resultado:

Agora vamos criar um controller para tratar da página inicial da nossa aplicação executando o seguinte comando:


rails g controller home index

Quando usamos rails g equivale a usarmos rails generate, eu prefiro usar a forma abreviada mas ambas funcionam da mesma forma. Portanto, esse comando gera um controller chamado home, o ultimo parâmetro é o nome da action que usaramos.

Após executar esse comando o Rails automaticamente criará para você uma série de arquivos, em especial para o nosso propósito o controller e a view.

app/controller/home_controller.rb

app/view/home/index.html.erb

Se você der uma olhadinha no home_controller.rb perceberá que a action index já está lá.

Agora precisamos editar a view app/view/home/index.html.erb desta forma:


<h2>Seja bem vindo<h2>
<p>Aogra você pode fazer o controle sobre os seus gastos e economizar uma grana.</p>

Agora se você iniciar o seu servidor com o comando


rails s

e acessar o endereço o endereço  http://localhost:3000/home/index você visualizará a página que acabamos e editar.

Nota: o comando rails s é a abreviatura do rails server ambos tem a mesma função, como já disse, eu prefiro sempre usar a forma reduzida. Para sair do servidor é pressionar as teclas CTRL + C.

Para definirmos ela como a nossa página inicial faremos o seguinte:

Vamos deletar o arquivo padrão da página inicial do rails:

public/index.html

Em seguida vamos abrir o arquivo:

config/routes.rb

E editá-lo da seguinte forma:

ControleGastos::Application.routes.draw do

 root :to=> "home#index"

 resources :centro_de_custos

 resources :lancamentos

 # The priority is based upon order of creation:
 # first created -> highest priority.
...

Pois bem, acabamos de definir a página inicial da nossa aplicação.

Vamos fazer um teste acessando

http://localhost:3000

Bem pessoal, por enquanto é isso, esse tutorial foi bem teórico, mas muito importante para entendermos alguns conceitos importantes do Rails.

5 Respostas

  1. Muito Bom… Espero que continue com as video aulas!

  2. Por exemplo, se tenho 2 tabelas uma contendo:
    id
    nome
    E a segunda contendo
    id
    nome
    id_primeira q faz referencia ao id da primeira tabela
    Como faço para exibir no index da segunda o nome equivalente ao id da primeira ao inves de exibir o numero do id?

  3. Poxa eu queria muito ver como se pode fazer um relatorio simples destes dados😦 tem como fazer ????

  4. Qual a função do resources :centro_de_custos e do resources :lançamentos no routes.rb?

Deixe uma resposta

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

%d blogueiros gostam disto: