Começando com o Rails!
Nós vamos usar o Rails para criar nossa aplicação de
Back-End.
LEMBRE-SE: o Back-End é aplicação que vai apenas gerenciar
os dados.
O Rails segue a arquitetura que nós vimos na dinâmica: o MVC
(Model View Controller).
Ele funciona igualzinho como foi na dinâmica do Instagram
Humano:
1. O Back-End é feito para aceitar requisições HTTP. Essas
requisições são feitas para uma rota da aplicação.
2. tudo começa nas rotas: uma rota aponta para uma ação
de uma controller;
3. a controller utiliza as models necessárias para pegar os
dados que aquela ação da controller necessita;
4. As models possuem funções que permitem o acesso ao
banco de dados;
5. As models devolvem os dados solicitados para a
controller e a controller pede para a view montar a
resposta que será devolvida para quem fez a requisição
Você vai perceber essa arquitetura em ação na prática.
Mas primeiro, você precisa de um ambiente com o Rails
instalado
Instalando o Rails no Linux
Se você está usando um Linux, pode instalar utilizando RVM
(Ruby Version Manager). Rode os seguintes comandos:
gpg --keyserver hkp://keys.gnupg.net --recv-keys
409B6B1796C275462A1703113804BB82D39DC0E3
7D2BAF1CF37B13E2069D6956105BD0E739499BDB
curl -sSL https://get.rvm.io | bash -s stable --rails
Se não funcionar, siga o passo a passo na documentação do
RVM.
Utilizando o CodeAnywhere
Para essa prática você pode usar o CodeAnywhere para criar
sua aplicação com o Rails.
Basta criar um container com Ruby on Rails.
Quando o container for criado, instale a versão 2.4.0 do Ruby e
instale a última versão do Rails. Rode os seguintes comandos
no terminal do container do CodeAnywhere:
rvm install ruby 2.4.0
gem install rails
Nós precisamos da versão 5 do Rails. Confira a versão que foi
instalada rodando o seguinte comando:
rails --version
Qualquer variação da versão 5 serve.
Você provavelmente já sabe como usar o CodeAnywhere.
Criando um novo projeto com
o Rails
O Rails já vem com uma interface de linha de comando (CLI,
Command Line Interface) que possui várias funcionalidades
para facilitar o desenvolvimento.
Para criar um projeto Rails, rode o seguinte comando:
rails new --api NOME_DO_SEU_PROJETO
cd NOME_DO_SEU_PROJETO
Substitua NOME_DO_SEU_PROJETO por um nome que faça
sentido para o seu projeto. Só não use acentos e caracteres
especiais.
O segundo comando faz você entrar na pasta que acabou de ser
criada com o seu projeto.
Como vamos criar uma lista de tarefas pode usar o nome
“todolist”.
A flag --api diz para o Rails que nós estamos criando essa
aplicação para ser apenas um Back-End, ou seja, que ele não
vai precisar de nada para tratar HTMLs, entre outras
tecnologias que não fazem sentido para uma aplicação que só
vai cuidar dos dados.
Como vamos usar o Rails para Back-End, a camada view tem
que ser alterada para fornecer meios de montar uma resposta
que não seja HTML.
Um formato que é bastante utilizado é o JSON. O JSON é um
formato simples e todas as linguagens já possuem
ferramentas para ler um JSON. Por isso que utilizamos ele.
O Rails já vem com JBuilder por padrão. Para usar ele, basta
abrir o arquivo Gemfile (na raiz do projeto) e descomentar a linha
(provavelmente vai ser a linha 13 do Gemfile) :
gem ‘jbuilder’, ‘~> 2.5’
Depois de colocar o JBuilder como dependência do projeto, rode
o seguinte comando para instalar o JBuilder:
bundle install
Agora você está pronto para começar a criar sua aplicação!
Criando a estrutura MVC para
a entidade Tarefa
Após criarmos a nossa abstração da entidade Tarefa, nós
criamos a model que vai representar essa entidade na
aplicação.
Para essa prática, uma Tarefa pode ser abstraída contendo as
propriedades “descricao”, do tipo String, e “finalizada”, do tipo
Boolean.
Para criar a estrutura necessária (todos os arquivos do MVC
para a entidade Tarefa), rode o seguinte comando:
rails generate scaffold Tarefa descricao:string
finalizada:boolean
Esse comando vai criar a rota, a controller, a model e a view
para a entidade Tarefa.
Além de criar os arquivos, ele já cria uma implementação
padrão das operações básicas em uma entidade: Cadastro,
Listagem, Atualização e Deleção. É o vulgo CRUD.
Junto com a model Tarefa que foi criada, o Rails vai criar uma
migration para criar a respectiva tabela no banco de dados.
Para o Rails realmente criar a tabela no banco de dados, rode o
seguinte comando:
rails db:migrate
Gaste alguns minutos explorando os arquivos criados. Veja a
controller em “app/controllers”, a model em “app/models” e a view
em “app/views” .
Para ver as rotas que estão registradas para a aplicação, rode o
seguinte comando:
rails routes
Agora, coloque sua aplicação no ar! Para subir um servidor com
a aplicação rodando, rode o comando:
rails server
Esse comando sobe um servidor com a aplicação que foi criada.
Para sua aplicação aceitar requisições, tem que ter um servidor
rodando a sua aplicação. Esse comando faz isso.
Por padrão, o Rails sobe a aplicação na porta 3000.
Se você está rodando em um Linux na sua própria máquina, a
aplicação vai estar disponível na URL http://localhost:3000.
Se você está usando o CodeAnywhere, você vai ter que pegar o
nome do seu container na página de informações do container
(basta clicar com o botão direito em cima do nome do seu
container, no menu lateral, e ir em “Info”).
Por exemplo, o nome do meu container é
http://todolist-italopaivab792165.codeanyapp.com, então a
aplicação vai estar rodando na URL
http://todolist-italopaivab792165.codeanyapp.com:3000.
Acesse a rota “/tarefas.json” nessa URL e veja que a aplicação vai
te retornar um JSON vazio (porque não tem nenhuma tarefa
cadastrada no banco de dados ainda).
Para acessar uma rota, apenas coloque ela no final da URL. Por
exemplo, com uma URL do CodeAnywhere:
http://todolist-italopaivab792165.codeanyapp.com:3000/tarefas.json
Lembrando que essa rota “/tarefas.json” aponta para a ação
“index” da controller de Tarefas se for feita uma requisição com
o método GET. Confira as rotas da aplicação com o rails
routes:
Ah, caso você não saiba, toda vez que você digita uma URL no
seu navegador (Chrome, Firefox, Internet Explorer, etc) você
está fazendo uma requisição HTTP utilizando o método GET!
Faz sentido né?! Porque você quer pegar (get) a página que está
naquela URL.
Então, quando você acessa essa rota, o Rails vai rodar a ação
“index” da controller de Tarefa. Dá uma olhada lá no que essa
ação “index” faz.
Provavelmente ela deve pedir uma lista com todas as tarefas
que estão no banco de dados para a model de Tarefa.
E como não tem nenhuma tarefa cadastrada ainda no banco de
dados, essa rota não está retornando dado nenhum.
Agora vamos popular o nosso banco de dados para aparecer
alguma coisa nessa rota!
Brincando com o banco de
dados através da Model
Após ter rodado o comando rails db:migrate você já deve ter
a tabela de tarefas no banco de dados. Agora é hora de
cadastrar algumas tarefas e testar algumas consultas.
Se você está usando o CodeAnywhere, abra outro terminal no
seu container (basta clicar com o botão direito em cima do
nome do seu container, no menu lateral, e ir em “SSH Terminal”)
para rodar os próximos comandos.
Deixe o rails server rodando em um terminal separado,
enquanto rodamos os próximos comandos em outro terminal.
Rode o seguinte comando para abrir um terminal com a nossa
aplicação. Aqui você pode testar qualquer classe (qualquer
model, por exemplo) da sua aplicação.
rails console
Com o terminal aberto pelo comando anterior, crie algumas
tarefas com o método “create”:
tarefa1 = Tarefa.create(descricao: ‘Primeira tarefa’,
finalizada: false)
tarefa2 = Tarefa.create(descricao: ‘Segunda tarefa’,
finalizada: false)
O método create cria uma registro no banco de dados e retorna
um objeto da classe da model na qual ele foi chamado, no caso
a model de Tarefa. Então, as variáveis tarefa1 e tarefa2 são
objetos da model Tarefa (lembra da orientação a objetos ?).
Agora acesse a rota “/tarefas.json” e perceba que agora essa rota
retorna os dados das tarefas cadastradas no banco de dados.
http://todolist-italopaivab792165.codeanyapp.com:3000/tarefas.json
Por quê?!
Porque a ação index da controller de tarefa pediu para o model
de Tarefa todas as tarefas cadastradas no banco de dados.
Esse método “all” faz uma consulta no banco de dados e pega
tudo que tiver na tabela de tarefas e retorna.
Teste esse método no console do Rails e veja que ele vai
retornar um array com as tarefas.
Teste alguns métodos de consulta ao banco de dados listados
na documentação do Rails.
Por exemplo, o where:
Tarefa.where(finalizada: false)
O método where t e permite fazer consultas ao banco de dados
com base em alguns critérios.
Essa consulta acima vai retornar uma lista (array) com todas
as tarefas que ainda não estão finalizadas.
Pesquise como fazer as seguintes consultas no banco de dados
através da model de Tarefa do Rails:
● pegar a última tarefa cadastrada no banco de dados;
● pegar a primeira tarefa cadastrada no banco de dados;
● pegar todas as tarefas que estão finalizadas;
● pegar a tarefa que possui a descrição “Estudar Banco de
Dados”;
● pegar a tarefa que possui o ID de número 7;
● saber quantas tarefas foram cadastradas no banco de
dados;
● saber quantas tarefas finalizadas existem no banco de
dados.
Você vai encontrar como fazer essas consultas na
documentação do Rails. Se não encontrar aí, pesquise no
Google e tente achar uma solução.