Blog do Urubatan
msgbartop
Desenvolvedor, Arquiteto, Palestrante, Coordenador do RSJUG, Patinador e Blogger
msgbarbottom

10 Apr 07 Quatro dias de Ruby On Rails - Primeiro dia

Bom, este post é uma tradução, adaptação e compactação do excelente tutorial de RoR que eu acabei de ler, para a versão original é só acessar este site.

Quatro dias de Ruby On Rails - Primeiro dia

4daysonrails.jpg

Introdução

Existem muitos anúncios extravagantes sobre o Rails por ai na internet. Por exemplo um artigo no OnLAMP.com dizendo que “você pode desenvolver aplicações web 10 vezes mais rápido com Rails do que com um framework padrão Java …”, depois disto o artigo passa a descrever como instalar Ruby e Rails em um PC criando uma aplicação padrão com “scaffold”, com nenhuma codificação.

Enquanto isto e impressionante, desenvolvedores “de verdade” sabem que isto não passa de “fumaça e espelhos”. Aplicações “reaid” não são tão simples assim. O que esta realmente acontecendo por baixo dos panos? Quão dificil é criar aplicações reais?

Nestas perguntas é que mora o perigo. Rails é extremamente bem documentado, provavelmente bem documentado demais para alguem que quer começar, são mais de 30.000 palavras de documentação online, no formato de um manual de referencia. O que esta faltando é um guia de por onde começar, apontando as páginas mais importantes para quem quer começar a desenvolver alguma coisa com rails.

Este tutorial serve para preencher este vazio. Ele assume que você ja tem o Ruby e o Rails ja instalado.

No primeiro dia vamos criar algo parecido, mas um pouco mais detalhado do que foi feito no artigo da OnLAMP.com.

No segundo dia, vamos começar a ver o que realmente acontece por debaixo dos panos, analisar o código gerado pelo “scaffold” novos recursos estarão marcados em negrito, explicados com texto, e seguidos por uma referencia a documentação do Ruby ou do Rails onde você pode encontrar mais detalhes.

No terceiro dia, pegaremos o código gerado pelo “scaffold” e começaremos a criar algo que pode ser chamado de uma aplicação real. Mais importante que isto, neste ponto você ja deve estar se sentindo confortável com a documentação online, assim você podera continuar pesquisando e evoluindo depois deste tutorial.

No quarto dia, adicionaremos mais uma tabela e vamos lidar com algumas das complexidades de gerenciar a integridade referencial.

No final de tudo, você vai ter uma aplicação pronta e funcionando, e conhecimento suficiente para seguir desenvolvendo com Ruby On Rails, e para saber onde conseguir mais informações.

Dez vezes mais rápido? depois de quarto dias com Rails, julgue você mesmo.

Primeiro Dia

O “Gerenciador de tarefas”

Este tutorial segue o processo de criação de um simples gerenciador de tarefas. Semelhante ao que você encontra no seu PDA, com uma lista de itens, agrupados por categorias, com notas opcionais, no final a aplicação vai parecer com a figura a baixo.

todo.jpg

O tutorial original, mostra passo a passo como instegrar o RoR como um fastcgi no apache, mas eu vou utilizar o WEBrick mesmo, que é o servidor padrão de desenvolvimento do RoR.

Executando o comando “rails”

E:>cd projetosrails
E:Projetosrails>rails ToDo
E:Projetosrails>cd Todo
E:ProjetosrailsToDo>

Executando “rails Todo” cria um novo diretório de nome “ToDo” que vai conter a aplicação organizada em diretórios e ja com diversos arquivos padrão, os mais importantes são os seguintes:

  • app - inclui o código da aplicação, se divide em “model”, “view”, “controller” e “helper”
  • config - contem o arquivo database.yml com as configurações de acesso ao banco de dados
  • log - Logs de aplicação. Nota: o arquivo development.log possui registros para cada ação executada pelo rails, bastante útil para solução de erros e depuração, mas precisa ser limpo regularmente!
  • public - O diretório com os arquivos estáticos da aplicação, contem os sub diretórios “images”, “javascripts” e “stylesheets”

Para executar a aplicação basta executar o comando a baixo:

E:ProjetosrailsToDo>ruby script\server

E a aplicação ja deve estar acessível através do endereço: http://localhost:3000/

Neste ponto você deve ver a página “Congratulations, you’ve put Ruby on Rails!”

No tutorial original, o autor diz que devem ser utilizadas as mesmas versões de todos os “gems” que ele utilizou, mas eu fiz tudo com o rails 1.2 e tudo funcionou sem problema algum.

Configurando o banco de dados.

Criar um banco de dados de nome “todos” em um MySQL (eu utilizei um instalado na maquina de desenvolvimento mesmo)

editar o arquivo config\database.yml e colocar o seguinte código:

development:
adapter: mysql
database: todos
host: localhost
username: foo
password: bar

Criando a tabela de categorias.

A tabela de categorias sera utilizada nos próximos exemplos, ela consiste apenas em uma lista que ira ser utilizada para agrupar as nossas tarefas.

[sql]CREATE TABLE `categories` (
`id` smallint(5) unsigned NOT NULL auto_increment,
`category` varchar(20) NOT NULL default ”,
`created_on` timestamp(14) NOT NULL,
`updated_on` timestamp(14) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `category_key` (`category`)
) TYPE=MyISAM COMMENT=’List of categories’; [/sql]

Algumas dicas sobre a nomenclatura dos campos.

? underscores nos nomes dos campos serão alterados por espaços pelo Rails, para nomes “legíveis por humanos”
? cuidado com a mistura de letras maiúsculas e minúsculas - algumas partes do código do Rails são “case sensitive”
? toda tabela deve ter uma chave primária de nome “id”, no MySQL o mais fácil é criar isto como “numeric auto_increment”
? links para outras tabelas seguem a convenção de nomes “_id”
? O Rails vai atualizar automaticamente campos de nome created_at/created_on ou updated_at/updated_on, então é uma boa ideia ter estes campos nas tabelas.
Documentation: ActiveRecord::Timestamp
? Dica útil: se você estver criando um sistema multi usuário (não importante para este tutorial), O Rails vai implementar Locking otimista se você adicionar um campo de nome “lock_version” do tipo integer, com valor padrão “0″. Tudo o que você vai precisar fazer é adicionar um campo “hidden” de mesmo nome nos seus formulários.
Documentation: ActiveRecord::Locking

Modelo de dados.

Criando um arquivo vazio.

E:ProjetosrailsToDo>ruby scriptgenerate model category
exists  app/models/
exists  test/unit/
exists  test/fixtures/
create  app/models/category.rb
create  test/unit/category_test.rb
create  test/fixtures/categories.yml
create  db/migrate
create  db/migrate/001_create_categories.rb

E:ProjetosrailsToDo>

vai criar um arquivo de nome category.rb, e dois arquivos de teste de nome category_test.rb e categories.yml.

Daqui a pouquinho vamos adicionar algum código no data model, por enquanto vamos deixa lo vazio mesmo.

Scaffolf

O controller é o coração de uma aplicação Rails

E:ProjetosrailsToDo>ruby scriptgenerate controller category
exists  app/controllers/
exists  app/helpers/
create  app/views/category
exists  test/functional/
create  app/controllers/category_controller.rb
create  test/functional/category_controller_test.rb
create  app/helpers/category_helper.rb

E:ProjetosrailsToDo>

O comando acima, gera tres arquivos e um diretório vazio.

Vamos editar o arquivo category_controller.rb

[ruby]class CategoryController < ApplicationController
scaffold :category
end[/ruby]

Documentation: ActionController::Scaffolding

Depois disto, acesse a página: http://localhost:3000/category e se maravilhe com um CRUD criado com uma linha de código.

Tente explorar um pouquinho o CRUD e cadastrar a mesma categoria duas vezes, o Rails vai mostrar uma mensagem de erro parecida com ?ActiveRecord::StatementInvalid in Category#create?. Isto pode ser corrigido adicionando algumas validações no modelo.

Aperfeiçoando o Model.

Rails fornece diversos tipos de validações “de grátis”, ou quase. vamos editar o arquivo category.rb e adicionar alguma validação ao nosso modelo vazio.

[ruby]class Category < ActiveRecord::Base
validates_length_of :category, :within => 1..20
validates_uniqueness_of :category, :message => “already exists”
end[/ruby]

Estas duas novas linhas vão adicionar validação automática.

? validates_length_of: o campo não pode ser vazio e valida também o tamanho
? validates_uniqueness_of: verifica a duplicidade dos códigos. Eu não gosto da mensagem padrão do Rails - “xxx has already been taked: - então eu forneci a mensagem a ser utilizada. Esta é uma das melhores features do rails. Teste os padrões, se não gostar costumize.

Documentation: ActiveRecord::Validations::ClassMethods

Tente novamente inserir um registro duplicado, desta vez o erro é mostrado de uma forma bem mais amigavel. Os estilos não são lindos, mas o que você esperava sem tabalho nenhum?

E é isto por enquanto, no segundo dia vamos melhorar um pouco mais a aplicação e começar a trabalhar com relacionamentos.

Tudo pronto? então siga para o segundo dia.

PS.: agradeço se os leitores que estão gostando do tutorial colocarem links em seus blogs para o tutorial, indicando para seus amigos.

Se você gostou deste post, lembre-se de assinar o RSS feed do blog, para ser notificado de novos posts!

Tags: ,

Reader's Comments

  1. |

    Uma coisa que seria legal de ser feito aqui (assim como eu o farei, no meu site) é criar um área própria, tipo um “wiki”, exclusivo para guardar os artigos, tutoriais e textos mais detalhados.

    No mais, é um excelente post!

    []s

    Reply to this comment
  2. |

    Valeu a dica, vou ver se organizo algo assim :D
    PS.: ainda tem mais 3 deste tutorial, os outros 3 dias do Four Days on Rails :D

    Reply to this comment
  3. |

    Outro tutorial que aconselho é o “Rails para sua diversão e lucro” do Ronaldo Melo Ferraz, explica muita coisa, eu encontrei aqui: http://kb.reflectivesurface.com/br/tutoriais/railsDiversaoLucro/

    []’s

    Reply to this comment
  4. |

    [...] primeiro dia será criado algo parecido, mas um pouco mais detalhado do que foi feito num artigo sobre Rails da [...]

    Reply to this comment
  5. |

    [...] Quatro dias de Ruby On Rails - Primeiro dia, Quatro dias de Ruby On Rails - Segundo dia [...]

    Reply to this comment
  6. |

    [...] mais sobre RoR (Ruby On Rails), eu traduzi a pouco tempo o ótimo tutorial Four Dais on Rails: Primeiro Dia, Segundo Dia, Terceiro Dia, Quarto e Último [...]

    Reply to this comment
  7. |

    [...] mais sobre RoR (Ruby On Rails), eu traduzi a pouco tempo o ótimo tutorial Four Dais on Rails: Primeiro Dia, Segundo Dia, Terceiro Dia, Quarto e Último Dia [...]

    Reply to this comment
  8. |

    [...] Quatro dias de Ruby On Rails - Primeiro dia, Quatro dias de Ruby On Rails - Segundo dia, [...]

    Reply to this comment
  9. |

    Olá pessoal, muito bom este post, parabéns ao criador!

    Bom o meu problema é que não estou conseguindo gerar esse database, tentei executar o SQL passado no tutorial e da um erro
    “Erro ao executar SQL (1064)”
    alguém sabe o que estou fazendo errado? Obrigado!

    Reply to this comment
  10. |

    Qual banco de dados tu ta usando?
    Tu criou o banco de dados antes de executar os comandos?

    Reply to this comment
  11. |

    Fiz td como especificado no tutorial, criei o banco, mas após editar o arquivo category_controller.rb, quando vou acessar a pagina e ver o resultado, me surge o erro abaixo. Olhei o arquivo boot.rb mas nao encontrei nada que pudesse ser a causa dele… alguma pista???

    Routing Error
    no route found to match “/category” with {:method=>:get}

    Obrigado.

    Reply to this comment
  12. |

    [...] Ruby começou a ganhar espaço nas empresas e na blogosfera principalmente por causa do Rails, mas o Rails não é o único framework para desenvolvimento Web em Ruby, um destes outros [...]

    Reply to this comment
  13. |

    [...]
    Alguns links interessantes, estamos nos baseando neles pra dar os primeiros passos:
    Quatro dias de Ruby on Rails
    [...]

    Reply to this comment
  14. |

    Dae gente…

    To seguindo o tutorial e encontrei o seguinte problema:

    NoMethodError in CategoryController#index

    undefined method `scaffold’ for CategoryController:Class

    Não sei o que pode ser pois eu segui exatamente o que estava no tutorial e tudo deu certo…

    Reply to this comment
  15. |

    Pesquisando no nosso amigo Goooooooooogle descobri o que estava acontecendo…

    Nesse post usuários dizem que o método scaffold foi substituído e não está mais em uso a partir do Rails 2.0.
    Endereço do tópico http://www.railsforum.com/viewtopic.php?pid=47541

    Reply to this comment
  16. |

    [...] urubatan.com.br ruby-br.org (Ruby Brasil) ruby-lang.org (Site oficial) instantrails.rubyforge.org (InstantRails) [...]

    Reply to this comment
  17. |

    [...] urubatan.com.br API do Ruby on [...]

    Reply to this comment
  18. |

    [...]  http://www.urubatan.com.br/quatro-dias-de-ruby-on-rails-primeiro-dia/ [...]

    Reply to this comment
  19. |

    ao instalar o rubygems deu-me isto herecandido@candido-desktop:~/rubygems-1.0.1$ sudo gem update –system
    Updating RubyGems…
    ERROR: While executing gem … (URI::InvalidURIError)
    bad URI(is not URI?): http://:8080/
    candido@candido-desktop:~/rubygems-1.0.1$
    .tenho o ubuntu 8.04 lst não sei o que fazer??? pode ajudar ??

    Reply to this comment
  20. |

    Pessoal,

    Instalei o Rails 2.0 e estou seguindo este Tutorial para aprender.
    Tive o mesmo problema de alguns colegas.
    pesquisei e encontrei este site
    http://fairleads.blogspot.com/2007/12/rails-20-and-scaffolding-step-by-step.html

    Como eu queria ver fucionar o que estava fazendo .. instalei o rails 1.2.5

    Funcionou!

    T+

    Reply to this comment
  21. |

    o scaffold nao funciona tentei e deu a seguinte mensagem

    SyntaxError in ContextsController#index

    Reply to this comment
  22. |

    [...] no blog do Urubatan um artigo que ele traduziu dos “Quatro Dias de Ruby on Rails” muito interessante para quem quer iniciar nessa excelente [...]

    Reply to this comment
  23. |

    Muito bom material para que está começando Ruby on Rails.

    Reply to this comment

Leave a Comment