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.

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.
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.

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:
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!
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
Valeu a dica, vou ver se organizo algo assim
PS.: ainda tem mais 3 deste tutorial, os outros 3 dias do Four Days on Rails
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
[...] primeiro dia será criado algo parecido, mas um pouco mais detalhado do que foi feito num artigo sobre Rails da [...]
[...] Quatro dias de Ruby On Rails - Primeiro dia, Quatro dias de Ruby On Rails - Segundo dia [...]
[...] 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 [...]
[...] 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 [...]
[...] Quatro dias de Ruby On Rails - Primeiro dia, Quatro dias de Ruby On Rails - Segundo dia, [...]
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!
Qual banco de dados tu ta usando?
Tu criou o banco de dados antes de executar os comandos?
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.
[...] 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 [...]
[...]
Alguns links interessantes, estamos nos baseando neles pra dar os primeiros passos:
Quatro dias de Ruby on Rails
[...]
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…
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
[...] urubatan.com.br ruby-br.org (Ruby Brasil) ruby-lang.org (Site oficial) instantrails.rubyforge.org (InstantRails) [...]
[...] urubatan.com.br API do Ruby on [...]
[...] http://www.urubatan.com.br/quatro-dias-de-ruby-on-rails-primeiro-dia/ [...]
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 ??
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+
o scaffold nao funciona tentei e deu a seguinte mensagem
SyntaxError in ContextsController#index
[...] no blog do Urubatan um artigo que ele traduziu dos “Quatro Dias de Ruby on Rails” muito interessante para quem quer iniciar nessa excelente [...]
Muito bom material para que está começando Ruby on Rails.