Completed 200 OK in 12ms (Views: 10.3ms | ActiveRecord: 0.2ms)
É sempre importante estar de olho nessas requisições. Podemos observar
os parâmetros enviados pelo usuário, as consultas SQLs resultantes, o
tempo gasto em cada parte da aplicação e o código de resposta enviado
ao usuário.
4.4
Os arquivos gerados pelo scaffold
Vimos há pouco tempo que o scaffold gerou vários arquivos para nós. Mas o que
significa cada um deles? O que eles fazem e qual seu impacto no nosso projeto?
Migrações
Migrações são pequenos deltas de um banco de dados, ou seja, elas registram as
modificações que o schema, ou esquema, do banco de dados vai sofrendo. Elas con-
tém três informações importantes: uma informação de versão, um código de regres-
são e um código de incremento e todas elas ficam dentro do diretório db/migrate
do projeto.
Uma migração então possui um método up, que será executado quando o banco
for migrado de uma versão à outra. Quando houver a necessidade de se regredir
uma versão, talvez por causa de um bug, o método executado deverá ser o down. O
nome da versão da migração encontra-se no nome do arquivo, que nada mais é do
que uma data (ano, mês, dia, hora, minuto e segundo).
91
4.4. Os arquivos gerados pelo scaffold
Casa do Código
O Rails já conhece também o equivalente de desfazer para alguns comandos,
como drop_table para desfazer um create_table. Assim, é possível criar o método
change, que substitui ambos up e down. Você escreve o comando para incremento de
versão e o Rails encontra o equivalente quando a versão for decrementada, poupando
retrabalho pelo desenvolvedor.
Veja a pasta db/migrate. Lá haverá um arquivo que inicia com uma data, que
depende da hora que você executou o comando, e termina com _create_rooms.rb:
class CreateRooms < ActiveRecord::Migration
def change
create_table :rooms do |t|
t.string :title
t.string :location
t.text :description
t.timestamps
end
end
end
Vimos que, para executar as migrações pendentes, basta executar:
rake db:migrate
No capítulo 5, vamos revisitar e aprofundar em outros comandos de migrações.
Modelo
O arquivo room.rb gerado pelo scaffold no diretório app/models é o modelo que
tem seus dados guardados no banco de dados quando você clica no botão Create
Room. Nesse arquivo também ficam as regras de validação, relacionamentos com
outros modelos e outras coisas. O código atual é simples e veremos como customizá-
lo no futuro:
class Room < ActiveRecord::Base
attr_accessible :description, :location, :title
end
Os próximos dois arquivos são relacionados a testes.
92
Casa do Código
Capítulo 4. Primeiros passos com Rails
Teste unitário
Testes unitários são artefatos muito importantes para um sistema de qualidade.
Escrever teste, porém, é algo que é bastante complicado para iniciantes, pois existe
muita subjetividade em como escrever um teste. Por exemplo, devemos escrever um
teste antes do código de produção (ou seja, código que vai ser de fato executado
quando o site estiver no ar) ou depois? Devo usar qual técnica? Como usar mocks e
quando usar stubs?
Esse assunto é bastante complicado e importante, portanto recomendo a leitura
dos livros The RSpec Book, [5] e o Test-Driven Development: By Example [2]. A comu-
nidade Rails leva testes tão a sério que o próprio framework vem com um
conjunto
de ferramentas para auxiliar o desenvolvedor a criar criá-los.
Um exemplo disso são os arquivos gerados. Toda vez que o Rails gera um mo-
delo, controle ou apresentação, arquivos equivalentes para cada unidade são criados.
Outro artefato gerado são as fixtures, ou acessório, em uma tradução grosseira. As
fixtures são arquivos no formato YAML (http://yaml.org/), uma linguagem simples
para serialização de dados, que será inserido no banco de dados antes de executar os
testes unitários. Eles são úteis para podermos testar consultas ou para construir um
cenário em que um código deve ser executado para que tudo funcione (por exemplo,
para testar uma autenticação, é necessário que haja um usuário no banco de dados).
Rotas
Prosseguindo, a próxima modificação é no arquivo de rotas. O arquivo de rotas é
onde o Rails mapeia a URL da requisição à um controle que você escreve. Se você se
lembra bem, falamos na seção 3.2 que o Rails é bastante voltado à recursos, e agora
vemos bem isso olhando o arquivo routes.rb no diretório config:
resources :rooms
Essa linha é tudo o que você precisa dizer para ganhar as seguintes rotas:
GET /rooms - ação index - lista todos os quartos disponíveis;
GET /rooms/new - ação new - mostra uma página com um formulário para a
criação de novos quartos;
POST /rooms - ação create - cria um novo recurso na coleção de quartos;
93
4.4. Os arquivos gerados pelo scaffold
Casa do Código
GET /rooms/:id - ação show - exibe detalhes de um quarto cuja chave primá-
ria (famoso id) seja especificada na URL (id 123 para a URL /rooms/123, por
exemplo)
GET /rooms/:id/edit - ação edit - exibe o formulário para a edição de um