O Rails é um framework que traz em um único pacote diversos componentes que permitem que os desenvolvedores Ruby criem qualquer tipo de aplicação voltada para a web. Todos esses componentes do Rails são desenvolvidos utilizando a linguagem Ruby. Entre os componentes do Rails tem-se o ActionPack para geração de páginas interativas, servidor de aplicação que será o responsável por exibir as aplicações desenvolvidas com Rails, banco de dados SQLite3, biblioteca para mapeamento objeto-relacional, além de diversos outros componentes para trabalhar com webservices, teste de unidade e integração, entre outros.

Para trabalhar com Rails basta acessar o site http://www.railsinstaller.org/pt-BR e baixar o pacote completo que traz o Ruby e o Rails no mesmo produto. Esse pacote já inclui a versão correta do Ruby e do Rails. Entre os produtos que acompanham o pacote tem-se o Ruby 2.1.5, Rails 3.2, Bundler, Git, Sqlite, TinyTDS, Suporte do SQL Server e o DevKit.

Até este momento ainda é recomendado baixar o 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 https://s3.amazonaws.com/railsinstaller/Windows/railsinstaller-2.2.5.exe.

2. Criando e Alterando uma Aplicação Web

Para criar uma aplicação web com Rails basta abrir o prompt de comando e digitar o comando rails seguido pelo nome da aplicação, conforme mostra o exemplo abaixo:

c:\Ruby22\bin>rails new appwebexemplo

Também é possível indicar o caminho onde a aplicação será criada, isso é realizado quando se define o nome da aplicação. Se não for especificado o caminho da aplicação ela será criada no diretório corrente do prompt, em que no exemplo acima seria no caminho “c:\Ruby22\bin”.

Para criar a aplicação no c:” pode-se utilizar o comando conforme abaixo:

c:\Ruby22\bin>rails new c:\appwebexemplo

Caso o Rails não esteja no classpath será preciso navegar até a pasta bin do Ruby. No comando acima estamos na pasta bin do Ruby. Para navegar até a basta bin do Ruby utiliza-se o comando cd c:\Ruby22\bin e depois basta executar o comando acima.

Após executar o comando do rails serão criados todos os diretórios e configurações necessárias para a execução da aplicação.

Com isso a aplicação web será gerada em uma nova pasta chamada "appwebexemplo". Além disso, também serão gerados arquivos e pastas que montarão a estrutura básica de uma nova aplicação, como as pastas: app, config, db, doc, lib, log, public, script, teste, tmp, vendor e os arquivos README e Rakefile. Dessa forma, com apenas um único comando já foi possível gerar todo esqueleto necessário para a aplicação web ser gerenciada pelo desenvolvedor.

Basicamente entre os diretórios criados tem-se o diretório app que contém os diretórios controller, models, views e outros artefatos da aplicação. Esse diretório possui tudo que é necessário para criarmos as páginas e as funcionalidades necessárias da aplicação.

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 conforme abaixo:

cd c:\appwebexemplo

c:\appwebexemplo>rails server

Após isso o servidor começará a carregar a aplicação. Para acessar a página principal do servidor web basta acessar a URL http://localhost:3000/ no browser. Deve-se observar que a aplicação não está sendo acessada através desta URL e sim o servidor web que traz essa página como default.

Após isso será exibida a página conforme abaixo:

Figura 1. Acessando o servidor de aplicação através do browser.

Isso indica que o servidor de aplicação está executando normalmente.

Com isso já é possível criar as páginas da nossa aplicação e torna-la disponível para que todos possam acessar. Para isso podemos utilizar a ferramenta scaffolding que cria rapidamente um CRUD da aplicação. O CRUD significa Create (Criar), Read (Ler), Update (Atualizar) e Delete (Deletar).

O scaffolding é uma ferramenta do Rails que gera rapidamente todo o código e as páginas necessárias para uma aplicação. Por exemplo, quando criamos um CRUD para uma aplicação de locadora de automóveis devemos criar um CRUD para os carros onde pode-se cadastrar, atualizar, ler e deletar os carros da locadora, também pode-se criar outros CRUDs como para alugar carros, cadastrar clientes, etc. Além de realizar essas quatro operações no banco de dados o scaffolding também cria as páginas necessárias para realizar essas quatro operações por parte do usuário.

Para utilizar o scaffold pode-se utilizar o comando conforme abaixo no prompt de comando:

c:\appwebexemplo>rails generate scaffold appwebexemp nome:string id_seq:string endereco:text preco:decimal email:string

É importante estar no diretório da aplicação quando o comando acima for digitado, além disso a janela anterior que está executando o servidor de aplicação não deve ser fechada, é preciso abrir um novo prompt para executar o comando acima. Após executar o comando acima diversos arquivos serão criados conforme mostra o prompt de comando.

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 views como a página index.html.erb, edit.html.erb, show.html.erb, new.html.erb, entre outras. Além dessas páginas a ferramenta também cria em db/migrate um script para criar a base de dados, cria os testes de unidade, páginas para realizar o teste de armazenamento de dados, adiciona informações sobre o roteamento das páginas, o controller para receber os dados dos formulários, e os arquivos css para os estilos da página.

Conforme as configurações realizadas pelo scaffolding o novo endereço para acessar a página da aplicação é o http://localhost:3000/appwebexemps.

É importante observar que a URL tem um "s" no final. Para verificar a URL criada basta ir em config e no arquivo routes. Após todas as configurações e arquivos gerados pelo Rails ainda é preciso criar o banco de dados que armazenará e buscará as informações para serem apresentadas pela aplicação.

Outra tarefa bastante facilitadora do Rails é que quando executa-se o comando scaffolding ele também gera um pequeno script chamado migration que é utilizado 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/migrate, nesse diretório está o arquivo <timestamp>_create_appwebexemps.rb, em que <timestamp> é quando o arquivo foi criado. Abrindo este arquivo pode-se visualizar que foi gerado um script com os campos e o tipo de cada um dos campos que será criado no banco de dados.

Este arquivo migration é um pequeno script em Ruby. Para executar este script é preciso utilizar outra ferramenta do Rails chamado rake. Assim, basta executar o comando abaixo no prompt:

rake db:migrate

O Rails vem com suporte nativo ao SQLite3. O SQLite3 é 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 suporte a diversos outros bancos de dados como MySQL e PostgreSQL.

Agora basta acessar a aplicação através do endereço http://localhost:3000/appwebexemps/ conforme mostra a imagem abaixo:

Figura 2. Aplicação web criada exibindo os resultados na tela.

O erro mais comum que normalmente ocorre é o "ExecJS::ProgramError in #index ruby". Para solucionar este problema basta ir até o diretório C:\appwebexemplo\app\views\layouts e abrir o arquivo application.html. Agora basta pesquisar por application e trocar por default, 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 altera-los e deletá-los.

Dessa forma, utilizando as ferramentas disponíveis pelo Rails é possível montar uma aplicação completa em poucos minutos e com muito pouco código.

Apesar do Scaffolding gerar toda arquitetura e o código da aplicação ainda pode ser preciso realizar customizações neste código. Pode-se observar a pasta app da aplicação que existe diversas customizações que podem ser realizadas, visto que esta pasta contém a maior parte do código da aplicação.

Antes de alterar o código é preciso entender a arquitetura da aplicação. Basicamente a aplicação é dividida em três partes principais, são elas: Model, View e Controller. Essa arquitetura tem o nome de MVC (Movel View Controller). Assim, todo código gerado pelo Rails está em uma das três categorias. O Model possui código que gerencia como a informação é escrita e lida para a base de dados. Os códigos no Model representam as coisas que existem no domínio do sistema, ou seja, os problemas do negócio que estão sendo solucionados. A View é parte da aplicação que é apresentada ao usuário final, também chamada de Camada de Apresentação. Assim, na View tem-se a páginas web que o usuário visualiza. O Controller é o cérebro da aplicação, é nele que se decide como o usuário interage com o sistema, controlando qual informação é acessada no Model e qual parte da View será exibida ao usuário.

Segue abaixo a arquitetura MVC organizada em pastas na aplicação:

Figura 3. Organização em pastas do MVC no Rails.

Para alterar as informações das páginas web basta alterar os arquivos com a extensão ".html.erb" na pasta View, conforme mostra a figura abaixo:

Figura 4. Páginas web para serem alteradas.

Para alterar o label que aparece na página index basta abrir o index e alterar conforme desejado. Segue o código abaixo com os novos textos inseridos na página index:


  <h1>Listando Central de Revistas</h1>
   
  <table>
    <tr>
      <th>Nome</th>
      <th>Id seq</th>
      <th>Endereco</th>
      <th>Preco</th>
      <th>Email</th>
      <th></th>
      <th></th>
      <th></th>
    </tr>
   
  <% @appwebexemps.each do |appwebexemp| %>
    <tr>
      <td><%= appwebexemp.nome %></td>
      <td><%= appwebexemp.id_seq %></td>
      <td><%= appwebexemp.endereco %></td>
      <td><%= appwebexemp.preco %></td>
      <td><%= appwebexemp.email %></td>
      <td><%= link_to 'Mostrar', appwebexemp %></td>
      <td><%= link_to 'Editar', edit_appwebexemp_path(appwebexemp) %></td>
      <td><%= link_to 'Deletar', appwebexemp, method: :delete, data: { confirm: 'Quer mesmo deletar?' } %></td>
    </tr>
  <% end %>
  </table>
   
  <br />
   
  <%= link_to 'Nova Revista', new_appwebexemp_path %>
  

Listagem 1. Alterações realizadas na página index.

Acessando a página novamente tem-se que os labels foram corretamente alterados conforme a figura abaixo:

Figura 5. Página de listagens com labels alterados.

Conforme pode-se verificar basta alterar o código e atualizar a página do browser que o resultado atualizado será imediatamente mostrado.

Essa velocidade é por que o Rails é construído com Ruby, e o código do Ruby não precisa ser compilado. Assim, o servidor web do Rails pode apenas executar o código fonte atualizado, diferente de outras plataformas, como o Java, que é preciso atualizar o código, compilar, empacotar e por fim realizar o deploy da aplicação no servidor web. O ciclo de desenvolvimento do Rails é bastante rápido bastando realizar as alterações no código.

Também é possível adicionar novas informações à aplicação. Por exemplo, para inserir o telefone da central deve-se alterar as páginas e inserir esse registro no banco de dados, tanto a coluna quanto a informação. Para adicionar uma nova coluna à tabela do banco de dados basta executar o comando abaixo:

c:\appwebexemplo>rails generate migration AddTelelefoneToappWebexemps telfone:string

invoke active_record

create db/migrate/20160105232441_add_telelefone_to_app_webexemps.rb

O Rails utiliza a convenção para gerar o script do banco de dados através do comando acima. Assim, o Rails verifica que no texto "AddTelelefoneToAppWebexemps" o Add representa uma adição de um Telefone para o AppWebexemps que é o nome da tabela do banco de dados. Conforme pode-se verificar essa é uma convenção utilizada pelo Rails.

Para visualizar o código gerado basta verificar o script criado em db/migrate conforme mostra a figura abaixo:

Figura 6. Script gerado para alterar a base de dados.

Segue abaixo o código do script gerado:


  class AddTelelefoneToAppWebexemps < ActiveRecord::Migration
    def change
      add_column :appwebexemps, :telefone, :string
    end
  end 
  

Listagem 2. Código gerado pela ferramenta migration para alterar o banco de dados.

Pode-se verificar que existem dois scripts na pasta. Se executar o comando “rake db:migrate” teoricamente o primeiro script seria executado e o banco de dados seria novamente criado, o que não é o desejado. No entanto, o Rails utiliza o timestamp para saber qual script executar. Dessa forma, executando o comando "rake db:migrate" o Rails sabe qual script ele já executou e assim sendo ele executará apenas o segundo script.

Se alguma exceção ocorrer será exibido no console, caso contrário nenhum retorno será exibido.

Agora que o banco de dados já foi alterado é preciso adicionar o novo campo nas páginas. Como foi verificado anteriormente a ferramenta Scaffolding gera o código para o programador, porém é responsabilidade do programador manter o código atualizado. Assim, é preciso alterar cada uma das páginas necessárias (index, new, show, edit, etc). Portanto, é preciso alterar cada uma das páginas para compor a informação do telefone que foi adicionado à página web.

Segue abaixo o código da página de edição que ficou sem alterações:


  <h1>Editing appwebexemp</h1>
   
  <%= render 'form' %>
   
  <%= link_to 'Show', @appwebexemp %> |
  <%= link_to 'Back', appwebexemps_path %>
  

Listagem 3. Código da página de edição.

Conforme pode ser visto o código de edição chama o form. O form deve ser alterado, pois deve-se adicionar o telefone. Segue abaixo o código do form:


  <%= form_for(@appwebexemp) do |f| %>
    <% if @appwebexemp.errors.any? %>
      <div id="error_explanation">
        <h2><%= pluralize(@appwebexemp.errors.count, "error") %> prohibited this appwebexemp from being saved:</h2>
   
        <ul>
        <% @appwebexemp.errors.full_messages.each do |msg| %>
          <li><%= msg %></li>
        <% end %>
        </ul>
      </div>
    <% end %>
   
    <div class="field">
      <%= f.label :nome %><br />
      <%= f.text_field :nome %>
    </div>
    <div class="field">
      <%= f.label :id_seq %><br />
      <%= f.text_field :id_seq %>
    </div>
    <div class="field">
      <%= f.label :endereco %><br />
      <%= f.text_area :endereco %>
    </div>
    <div class="field">
      <%= f.label :preco %><br />
      <%= f.text_field :preco %>
    </div>
    <div class="field">
      <%= f.label :email %><br />
      <%= f.text_field :email %>
    </div>
    <div class="field">
      <%= f.label :telefone %><br />
      <%= f.text_field :telefone %>
    </div>
    <div class="actions">
      <%= f.submit %>
    </div>
  <% end %>
  

Listagem 4. Código da página form.

No código acima foi incluído mais um div contendo as informações do campo telefone.

Também é preciso alterar o arquivo show para mostrar o campo telefone, conforme o código abaixo:


  <p id="notice"><%= notice %></p>
   
  <p>
    <b>Nome:</b>
    <%= @appwebexemp.nome %>
  </p>
   
  <p>
    <b>Id seq:</b>
    <%= @appwebexemp.id_seq %>
  </p>
   
  <p>
    <b>Endereco:</b>
    <%= @appwebexemp.endereco %>
  </p>
   
  <p>
    <b>Preco:</b>
    <%= @appwebexemp.preco %>
  </p>
   
  <p>
    <b>Email:</b>
    <%= @appwebexemp.email %>
  </p>
   
  <p>
    <b>Telefone:</b>
    <%= @appwebexemp.telefone %>
  </p>
   
  <%= link_to 'Edit', edit_appwebexemp_path(@appwebexemp) %> |
  <%= link_to 'Back', appwebexemps_path %>
  

Listagem 5. Código da página show.

O arquivo new não é preciso ser alterado, visto que ele chama o form, assim como ocorre com o arquivo edit. Segue o código abaixo do new:


  <h1>New appwebexemp</h1>
   
  <%= render 'form' %>
   
  <%= link_to 'Back', appwebexemps_path %>
  

Listagem 6. Código da página new.

Por fim, é preciso alterar o arquivo index que é responsável por listar todas as centrais de revistas. Segue abaixo o código do index:


  <h1>Listando Central de Revistas</h1>
   
  <table>
    <tr>
      <th>Nome</th>
      <th>Id seq</th>
      <th>Endereco</th>
      <th>Preco</th>
      <th>Email</th>
      <th>Telefone</th>
      <th></th>
      <th></th>
      <th></th>
    </tr>
   
  <% @appwebexemps.each do |appwebexemp| %>
    <tr>
      <td><%= appwebexemp.nome %></td>
      <td><%= appwebexemp.id_seq %></td>
      <td><%= appwebexemp.endereco %></td>
      <td><%= appwebexemp.preco %></td>
      <td><%= appwebexemp.email %></td>
      <td><%= appwebexemp.telefone %></td>
      <td><%= link_to 'Mostrar', appwebexemp %></td>
      <td><%= link_to 'Editar', edit_appwebexemp_path(appwebexemp) %></td>
      <td><%= link_to 'Deletar', appwebexemp, method: :delete, data: { confirm: 'Quer mesmo deletar?' } %></td>
    </tr>
  <% end %>
  </table>
   
  <br />
   
  <%= link_to 'Nova Revista', new_appwebexemp_path %>
  

Listagem 7. Código da página index.

No código acima adicionou-se mais uma tagth” e uma tagtd” com a informação do telefone.

A última alteração a ser realizada é no Model que é quem receberá as informações do Controller e também repassará as informações para o Controller redirecionar à View. Para isso basta localizar a pasta Models em App e editar o arquivo “appwebexemp.rb”. Segue o código abaixo com a adição do campo telefone:


  class Appwebexemp < ActiveRecord::Base
    attr_accessible :email, :endereco, :id_seq, :nome, :preco, :telefone
  end
  

Listagem 8. Alterando o modelo com a informação do telefone.

Ao exibir novamente o index através do endereço http://localhost:3000/appwebexemps pode-se observar que o telefone não tem nenhuma informação conforme a figura abaixo:

Figura 7. Página index exibindo informações sobre o telefone.

Para inserir uma nova informação sobre o telefone da central deve-se clicar em editar e inserir o telefone conforme mostra a imagem abaixo:

Figura 8. Editando o telefone de um registro.

Após a edição basta clicar no botão “Update Appwebexemp”.

Após isso a página show exibirá o campo telefone com a nova informação adicionada, conforme mostra a imagem abaixo:

Figura 9. Página exibindo informações do registro telefone adicionado.

Se visitarmos a página principal para listar as informações da central de revistas pode-se visualizar a informação do telefone que foi adicionada, conforme mostra a imagem abaixo:

Figura 10. Página exibindo nas listagens a informação do telefone editada.

Assim sendo, o Rails mostra a facilidade tanto de criar quanto alterar informações rapidamente em uma aplicação web. Através das ferramentas do Rails esse trabalho fica bastante facilitado. Além disso, utilizando o Ruby por trás é possível colocar a aplicação rapidamente em produção e torna-la disponível para os clientes.

Bibliografia

[1] Jay McGavren. Head First Ruby (O’Reilly, 2015).

[2] Ruby Programming Language. Disponível em https://www.ruby-lang.org/.

[3] David Griffiths. Head First Rails (O’Reilly, 2015).