Skip to content

Passo [05] Primeiro CRUD

snowniak edited this page Jun 21, 2012 · 4 revisions

Agora que já temos uma noção básica do roteamento do Rails, vamos fazer um CRUD. Para facilitar as coisas, o Rails oferece mais um gerador muito útil, o scaffold. Scaffolding não é uma prática muito utilizada em desenvolvimento real do dia-a-dia, mas é uma forma de aprendermos como utilizar a infra-estrutura do Rails como um todo.

Para começar, vamos criar um cadastro simple de Empresa, aonde a empresa deve ter uma Razão Social, CNPJ, Telefone para contato, link para o website e uma descrição.

Para facilitar as coisas, você pode usar este CNPJ: 59911948000141 ( créditos para http://www.gerardocumentos.com.br )

Abra o terminal novamente na pasta do projeto, e execute o seguinte comando:

$ rails generate scaffold Empresa razao_social:string cnpj:string telefone:string website:string descricao:text

Vamos analisar rapidamente o output deste comando:

      invoke  active_record
      create    db/migrate/20111113003544_create_empresas.rb
      create    app/models/empresa.rb
      invoke    test_unit
      create      test/unit/empresa_test.rb
      create      test/fixtures/empresas.yml
       route  resources :empresas
      invoke  scaffold_controller
      create    app/controllers/empresas_controller.rb
      invoke    erb
      create      app/views/empresas
      create      app/views/empresas/index.html.erb
      create      app/views/empresas/edit.html.erb
      create      app/views/empresas/show.html.erb
      create      app/views/empresas/new.html.erb
      create      app/views/empresas/_form.html.erb
      invoke    test_unit
      create      test/functional/empresas_controller_test.rb
      invoke    helper
      create      app/helpers/empresas_helper.rb
      invoke      test_unit
      create        test/unit/helpers/empresas_helper_test.rb
      invoke  assets
      invoke    coffee
      create      app/assets/javascripts/empresas.js.coffee
      invoke    scss
      create      app/assets/stylesheets/empresas.css.scss
      invoke  scss
      create    app/assets/stylesheets/scaffolds.css.scss

Além de Assets, Testes funcionais e unitários, Helper e um Modelo para a classe Empresa, o gerador atualizou o arquivo de rotas e criou um arquivo de Migração.

Arquivos de Migração ou Migrations são responsáveis por mapear o esquema do banco para classes Ruby, o nome do arquivo gerado contém um TimeStamp e um nome legível descrevendo o que este Migration faz.

db/migrate/2011XXXXXXXXXX_create_empresas.rb

Vamos dar uma olhada no que foi gerado:

class CreateEmpresas < ActiveRecord::Migration
  def change
    create_table :empresas do |t|
      t.string :razao_social
      t.string :cnpj
      t.string :telefone
      t.string :website
      t.text :descricao

      t.timestamps
    end
  end
end

Não vamos entrar em detalhes agora, mas é fácil notar que um arquivo de migração não é nada mais do que uma classe, isso quer dizer que dentro de um arquivo deste é possível adicionar métodos com lógica e até importar bibliotecas. Por exemplo, se você tem uma tabela com atributos nome e sobrenome e quiser adicionar uma nova coluna chamada nome_completo com o valor concatenado dos dois atributos já existentes, é possível.

Bom, como podemos acessar esse scaffold (CRUD) ? O Rails, usando de convenção, mapeou a rota do CRUD do Model Empresa para /empresas, acesse: http://localhost:3000/empresas

Oooops!

Empresas... Oooops!

Não foi possível encontrar a tabela 'empresas', percebeu alguma coisa? O Rails procurou por uma tabela chamada 'empresas', mas não criamos o banco de dados ainda!

Vamos utilizar mais uma ferramenta para gerenciar este recurso para nós, Rake.

Execute este comando para que o Rake possa executar a tarefa de migração do banco de dados:

$ rake db:migrate ( sincronizando os arquivos de migração com o banco de dados... )

==  CreateEmpresas: migrating =================================================
-- create_table(:empresas)
   -> 0.0019s
==  CreateEmpresas: migrated (0.0021s) ========================================

Ok! Agora temos uma tabela no banco de dados... Mas aonde está o banco de dados? Abra o arquivo 'config/database.yml'

Por padrão, uma aplicação Rails 3 utiliza SQlite3, no fundo não faz diferença se estamos desenvolvendo a aplicação para PostgreSQL, SQlite ou Oracle, já que o framework de banco de dados do Rails ( ActiveRecord ) abstrai as particularidade de cada um em prol do desenvolvedor. Como o SQlite3 não precisa de um serviço rodando, isso faz com que seja mais rápido de se preparar um ambiente de desenvolvimento Rails.

Atualize o navegador novamente:

Listing Empresas...

Cadastre o seu primeiro registro:

New Empresa

Pronto! Seu primeiro CRUD em Rails está funcionando.

Success