Como criar um CRUD completo com Rails
Veja neste artigo como desenvolver um CRUD utilizando o Rails, que inclui inúmeras ferramentas e scripts que facilitam e aumentam drasticamente a produtividade dos desenvolvedores contemporâneos.
O Rails é um framework completo que possui diversos componentes que permitem que qualquer desenvolvedor Ruby crie qualquer tipo de aplicação voltada para a web. Entre os componentes que o Rails oferece está o ActionPack que ajuda o desenvolvedor a gerar páginas interativas, um servidor de aplicação (web server) para exibir essas páginas, uma base de dados SQLite3, uma biblioteca para mapeamento objeto-relacional, ferramentas de script que ajudam a gerenciar a aplicação, além de diversas outras features para webservices, frameworks de teste, entre outros.
Uma diferenciação interessante de ser enfatizada é que enquanto o Ruby é uma linguagem de programação, o Rails é uma coleção de scripts codificados em Ruby. Assim, o servidor de aplicação, o framework ActionPack e diversas outras ferramentas escritas com Ruby são todos scripts Ruby e assim parte do Rails.
Para trabalhar com Rails deve-se baixar primeiramente o Ruby através do seu site (vide seção Links).
Após baixar o Ruby é possível instalar o Rails e as suas dependências utilizando o RubyGems na linha de comando do promt conforme o comando a seguir:
gem install rails
Se for necessário é preciso navegar até a basta bin do Ruby (cd c:\Ruby22\bin) e depois executar o comando apesentado. Após executar o comando gem tem-se como resultado no prompt a saída a seguir:
C:\Users\higorzm>cd c:\Ruby22\bin
c:\Ruby22\bin>gem install rails
Fetching: thread_safe-0.3.5.gem (100%)
Successfully installed thread_safe-0.3.5
Fetching: tzinfo-1.2.2.gem (100%)
Successfully installed tzinfo-1.2.2
Fetching: i18n-0.7.0.gem (100%)
Successfully installed i18n-0.7.0
Fetching: activesupport-4.2.5.gem (100%)
Successfully installed activesupport-4.2.5
Fetching: rails-deprecated_sanitizer-1.0.3.gem (100%)
Successfully installed rails-deprecated_sanitizer-1.0.3
Fetching: mini_portile2-2.0.0.gem (100%)
Successfully installed mini_portile2-2.0.0
Diversos componentes assim como documentações completas serão instalados. Esse processo pode demorar um bom tempo e o prompt exibirá diversos componentes e documentações sendo instalados.
Outra possibilidade é acessar o site do Rails Installer (vide seção Links) e baixar o pacote completo que traz o Ruby e o Rails no mesmo produto. Assim, a versão correta do Ruby já vem acompanhada da versão correta do Rails. Entre os produtos que o pacote do Rails traz tem-se o Ruby 2.1.5, Rails 3.2, Bundler, Git, Sqlite, TinyTDS, Suporte do SQL Server e o DevKit.
Alguns desenvolvedores mais experientes ainda recomendam a instalação do pacote que traz o Ruby 1.9, por ser mais estável. Para baixar o Ruby 1.9 que traz o Rails 3.x basta visitar o endereço da seção Links.
Criando uma aplicação web
Para criar uma aplicação web com Rails é muito simples: basta abrir o prompt de comando e navegar até a pasta bin do Ruby e digitar o comando rails seguido pelo nome da aplicação, conforme mostra o exemplo a seguir:
c:\Ruby22\bin>rails new testewebapp
Caso o rails esteja no classpath não é necessário navegar até a pasta bin do Ruby, basta digitar diretamente o comando no prompt. Porém, se for necessário é preciso navegar até a basta bin do Ruby utilizando o comando cd c:\Ruby22\bin e depois executar o comando apresentado. Após executar o comando do rails tem-se como resultado no prompt a saída a seguir:
c:\Ruby22\bin>rails new C:\appwebexemplo
create
create README.rdoc
create Rakefile
create config.ru
create .gitignore
create Gemfile
create app
create app/assets/javascripts/application.js
create app/assets/stylesheets/application.css
create app/controllers/application_controller.rb
create app/helpers/application_helper.rb
create app/views/layouts/application.html.erb
create app/assets/images/.keep
create app/mailers/.keep
create app/models/.keep
...
Esses são apenas alguns dos diversos outros arquivos e pasta que também serão criados. Basicamente, entre os diretórios criados tem-se:
- O diretório app contém os controller, models, views e outros artefatos da aplicação;
- O diretório config possui as configurações da aplicação como regras, roteamentos, base de dados, etc;
- O diretório db contém o esquema da base de dados utilizada pela aplicação;
- O diretório doc possui toda a documentação da aplicação;
- O diretório lib possui os módulos utilizados pela aplicação;
- O diretório log possui os logs gerados pelo servidor de aplicação, que são excelentes para encontrar erros;
- O diretório public contém os arquivos estáticos e compilados;
- O diretório script possui os scripts do rails que inicializam a aplicação e outros para deploy e execução;
- O diretório test possui os testes de unidade da aplicação;
- O diretório tmp possui os arquivos temporários.
- O diretório vendor possui código de terceiros.
Entre os arquivos temos:
- o config.ru, que é utilizado para o servidores baseados em Rack;
- os arquivos Gemfile e Gemfile.lock são utilizados para especificar as dependências do gem necessárias pela aplicação rails;
- o arquivo Rakefile localiza e carrega tarefas que podem ser executadas no prompt de comando;
- o README.rdoc possui uma instrução manual para a aplicação e deve ser editado para comportar as novas tarefas realizadas pela aplicação.
Com isso a aplicação web será gerada em uma nova pasta chamada "testewebapp". Dessa forma, com apenas um único comando já foi possível gerar todo esqueleto necessário para a aplicação web.
É possível indicar o caminho onde a aplicação será criada: isso é realizado quando se define o nome da aplicação. Se for especificado o caminho da aplicação ela será criada no diretório corrente do prompt.
Também será necessário rodar o comando bundle conforme o código a seguir:
C:\> c:\Ruby22\bin\bundle install
A saída será a mesma presentada na Listagem 1.
Listagem 1. Saída do Comando bundle
Fetching gem metadata from https://rubygems.org/............
Fetching version metadata from https://rubygems.org/...
Fetching dependency metadata from https://rubygems.org/..
Resolving dependencies............................................
Using rake 10.4.2
Using i18n 0.7.0
Installing json 1.8.3 with native extensions
Pode-se verificar que é preciso entrar no diretório da aplicação e executar o bundle.
Vale ressaltar que o comando anterior que foi utilizado para criar a aplicação web pode já incluir o comando Bundle e assim não é necessário rodá-lo em separado. Ele será automaticamente invocado na criação da aplicação web. No final, uma mensagem será recebida, como vemos a seguir:
Your bundle is complete!
Use bundle show [gemname] to see where a bundled gem is installed.
Agora que a aplicação web foi criada já é possível iniciar o servidor web que vem no pacote do rails. Para isso devemos navegar até a pasta da aplicação e executar o comando a seguir:
cd c:\appwebexemplo
c:\appwebexemplo>rails server
Após isso o servidor começará a carregar a aplicação conforme o log exibido no prompt de comando:
c:\appwebexemplo>rails server
=> Booting WEBrick
=> Rails 3.2.21 application starting in development on http://0.0.0.0:3000
=> Call with -d to detach
=> Ctrl-C to shutdown server
[2015-12-15 20:45:20] INFO WEBrick 1.3.1
[2015-12-15 20:45:20] INFO ruby 1.9.3 (2014-11-13) [i386-mingw32]
[2015-12-15 20:45:20] INFO WEBrick::HTTPServer#start: pid=7860 port=3000
Agora já é possível acessar a aplicação colocando a URL http://localhost:3000/ no browser. Após isso será exibida a página da Figura 1.
Figura 1. Acessando a aplicação principal através do browser.
Para editar o HTML da página inicial basta editar o arquivo public/index.html. O diretório public contém todos os conteúdos estáticos da aplicação.
Utilizando o Ruby não é necessário compilar código como é realizado com Java, pois ele é uma linguagem interpretada, bastando codificar e executar o código.
Também é possível utilizar outros servidores de aplicação. O Rails não é amarrado em nenhum tipo de servidor, banco de dados ou outros recursos que ele traz por padrão.
Criando um CRUD utilizando o Rails
Para criar as operações CRUD o Rails oferece uma forma simples que é o scaffolding. Este é uma ferramenta do Rails que gera rapidamente todo o código e as páginas necessárias para uma aplicação CRUD. Por exemplo, quando criamos um CRUD para uma aplicação de locadora de filmes devemos criar um CRUD para os filmes onde pode-se cadastrar, atualizar, ler e deletar os filmes da locadora. Também pode-se criar outros CRUDs como para alugar filmes, cadastrar fornecedores, clientes, etc. Dessa forma, o CRUD é essencial para qualquer aplicação web e exige um certo tempo dos desenvolvedores para criar todas as funcionalidades exigidas. Entre elas necessitamos de uma página para consulta, outra para cadastramento, outra para edição e uma última para deleção. Além disso, é preciso criar a tabela do banco de dados que irá armazenar essas informações.
Para utilizar a ferramenta scaffold tem-se o comando scaffold, que permite a sua rápida utilização. Para utilizá-lo pode-se utilizar o comando a seguir no prompt de comando:
c:\appwebexemplo>rails generate scaffold appwebexemp nome:string id_seq:string endereco:text preco:decimal email:string
Não podemos esquecer de estar no diretório da aplicação e a janela anterior que está executando o servidor de aplicação não deve ser fechada, por isso é preciso abrir um novo prompt para executar o comando apresentado.
Após executar o comando, diversos arquivos serão criados conforme mostra o prompt de comando:
invoke active_record
create db/migrate/20151215234254_create_appwebexemps.rb
create app/models/appwebexemp.rb
invoke test_unit
create test/unit/appwebexemp_test.rb
create test/fixtures/appwebexemps.yml
invoke resource_route
route resources :appwebexemps
invoke scaffold_controller
create app/controllers/appwebexemps_controller.rb
invoke erb
create app/views/appwebexemps
create app/views/appwebexemps/index.html.erb
create app/views/appwebexemps/edit.html.erb
create app/views/appwebexemps/show.html.erb
create app/views/appwebexemps/new.html.erb
create app/views/appwebexemps/_form.html.erb
invoke test_unit
create test/functional/appwebexemps_controller_test.rb
invoke helper
create app/helpers/appwebexemps_helper.rb
invoke test_unit
create test/unit/helpers/appwebexemps_helper_test.rb
invoke assets
invoke coffee
create app/assets/javascripts/appwebexemps.js.coffee
invoke scss
create app/assets/stylesheets/appwebexemps.css.scss
invoke scss
create app/assets/stylesheets/scaffolds.css.scss
O código criado pelo scaffold permite que o usuário crie, atualize, leia e delete os dados da aplicação numa base de dados. Pode-se notar que as páginas foram todas criadas no diretório view. Além dessas páginas, a ferramenta também cria em db/migrate um script para criar a base de dados, testes de unidade, páginas para realizar o teste de armazenamento de dados, informações sobre o roteamento das páginas, controller para receber os dados dos formulários e arquivos CSS para os estilos da página.
No entanto, ao tentar acessar a aplicação web através do endereço http://localhost:3000/appwebexemps teremos como resultado um erro de conexão com a base de dados. É importante observar que a URL tem um "s" no final. Para verificar a URL criada basta ir em config e no arquivo routes.
Esse erro ocorreu porque o banco de dados ainda não foi criado, assim, ao tentar buscar os dados para exibir ao usuário, o Rails não achou e exibiu assim uma exceção na tela.
Outra tarefa bastante facilitadora do Ruby é que quando ele gerou o scaffolding também gerou um pequeno script chamado migration, que é utilizado justamente para criar a tabela na base de dados que irá armazenar todos os dados da aplicação. O migration é um script que criar a estrutura da base de dados.
Para visualizar esse script basta acessar db/migrat e nesse diretório está o arquivo <timestamp>_create_tickets.rb, onde <timestamp> é quando o arquivo foi criado.
Abrindo-o pode-se visualizar o código da Listagem 2.
Listagem 2. Código do arquivo _create_tickets
class CreateApliwebs < ActiveRecord::Migration
def change
create_table : appwebexemps do |t|
t.string :nome
t.string :string
t.string :id_seq
t.string :string
t.string :endereco
t.string :text
t.string :preco
t.string :decimal
t.string :email
t.string :string
t.timestamps
end
end
end
Este arquivo migration é um pequeno script em Ruby. Ao invés de executá-lo diretamente, deve-se executá-lo utilizando outra ferramenta do Rails chamada rake. Assim, basta executar o comando a seguir no prompt:
rake db:migrate
Este comando executa o script e cria a tabela. Se tudo for criado corretamente o prompt exibirá o log a seguir:
c:\appwebexemplo>rake db:migrate
== CreateAppwebexemps: migrating =============================================
-- create_table(:appwebexemps)
-> 0.0060s
== CreateAppwebexemps: migrated (0.0070s) ====================================
O Rails vem com suporte nativo ao SQLite3 (vide seção Links), que é uma aplicação de banco de dados bastante leve e muito utilizada para aplicações que estão executando em ambiente de desenvolvimento e teste. O rails também oferece o SQLite quando se cria um novo projeto. O arquivo config/database.yml possui maiores informações sobre a configuração do banco de dados, conforme mostra a Listagem 3.
Listagem 3. Arquivo database
development:
adapter: sqlite3
database: db/development.sqlite3
pool: 5
timeout: 5000
No entanto, o rails também suporta MySQL e PostgreSQL, e possui adaptadores nativos para esses dois bancos de dados. Para utilizar o MySQL em desenvolvimento basta configurar o arquivo config/database.yml conforme mostra a Listagem 4.
Listagem 4. Usando MySQL
development:
adapter: mysql2
encoding: utf8
database: appwebexemps
pool: 5
username: root
password:
socket: /tmp/mysql.sock
O username e o password devem ser configurados conforme a instalação do banco de dados.
Para utilizar o PostgreSQL basta configurar conforme a Listagem 5.
Listagem 5. Usando PostgreSQL
development:
adapter: postgresql
encoding: unicode
database: appwebexemps
pool: 5
username: blog
password:
Agora basta acessarmos a aplicação através do endereço http://localhost:3000/appwebexemps/, conforme mostra a Figura 2.
Figura 2. Aplicação web criada realizando a conexão com a base de dados criada e exibindo os resultados na tela.
Caso ocorra algum erro como "ExecJS::ProgramError in #index ruby", basta ir até o diretório C:\appwebexemplo\app\views\layouts e abrir o arquivo application.html. Pesquise por application e troque por default, pois normalmente tem duas entradas: uma na linha 5 e outra na linha 6.
Agora já é possível navegar pela aplicação armazenando, lendo e listando dados, assim como alterá-los e deletá-los.
Para armazenar um dado basta clicar no botão “New Appwebexemp” e inserir os dados, conforme mostra a Figura 3.
Figura 3. Inserindo dados na aplicação web criada.
A tela seguinte mostra os dados cadastrados e permite que o usuário realize uma edição destes, conforme mostra a Figura 4.
Figura 4. Exibindo os dados e o botão Edit para realizar a alteração.
Clicando em Edit é possível visualizar os dados e alterá-los conforme necessário, como mostra a Figura 5.
Figura 5. Editando os dados cadastrados anteriormente pelo usuário.
Visitando a página principal pode-se visualizar o dado cadastrado conforme mostra a tabela da página principal (vide Figura 6).
Figura 6. Acessando a tela principal da aplicação com os dados sendo listados.
Dessa forma, utilizando poucas ferramentas e scripts é possível montar uma aplicação completa utilizando Ruby e Rails em poucos minutos e com muito pouco código. Neste exemplo não foi inserido uma única linha de código. Além disso, todas essas páginas geradas podem ser customizadas inserindo imagens, alterando completamente o layout, modificando JavaScript, inserindo mais código, entre outras funcionalidades, mas isso é assunto para um outro artigo.
Até a próxima.
Bibliografia
[1] Jay McGavren. Head First Ruby (O’Reilly, 2015).
[2] Ruby Programming
Language
https://www.ruby-lang.org/.
[3] David Griffiths. Head First Rails (O’Reilly, 2015).
[4] Download do Rails
http://rubyonrails.org/download/.
[5] Rails Installer
http://www.railsinstaller.org/pt-BR
[6] Rails 1.9
https://s3.amazonaws.com/railsinstaller/Windows/railsinstaller-2.2.5.exe
[7] SQLite
http://www.sqlite.org/
Artigos relacionados
-
Artigo
-
Artigo
-
Artigo
-
Artigo
-
Artigo