
MongoDB: Como utilizar em um projeto Rails
MongoDB é um SGBD orientado a documentos que se destaca pela alta escalabilidade, bom desempenho e flexibilidade na estrutura de dados.
Nesta publicação você aprenderá como instalar e utilizar ele em uma aplicação Ruby on Rails.
O que vamos criar
Criaremos um projeto Ruby on Rails que exibirá informações sobre alguns escritores e livros. Para cadastrar essas informações utilizaremos documentos em um banco de dados MongoDB.
Isso será feito com o auxílio de uma gem muito popular chamada Mongoid.
Ferramentas
- • Ruby 2.5
- • Rails 5.2
- • Mongoid 6.1
Instalação
Veja como instalar o mongoDB no ubuntu 18.04 (Bionic).
Instalação do MongoDB para outros Sistemas Operacionais.
1- Importe a chave pública que será utilizada pelo sistema de gerenciamento de pacotes
1 |
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 9DA31620334BD75D9DCB49F368818C72E52529D4 |
2- Crie um arquivo de lista para o MongoDB
1 |
echo "deb [ arch=amd64 ] https://repo.mongodb.org/apt/ubuntu bionic/mongodb-org/4.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-4.0.list |
3- Recarregue o banco de dados de pacotes locais
1 |
sudo apt-get update |
4- Instale a ultima versão do MongoDB
1 |
sudo apt-get install -y mongodb-org |
Pronto, agora você tem o MongoDB instalado em sua máquina!
Passo a Passo
Início
Nesta etapa você criará o projeto e fará algumas configurações iniciais.
1- Crie o projeto executando o comando
1 |
rails new mongoApp --skip-active-record |
A opção –skip-active-record serve para evitar a inclusão do Active Record.
2- Adicione a gem Mongoid ao seu Gemfile
1 |
gem 'mongoid', '~> 6.1.0' |
A gem Mongoid permite que o projeto se comunique com o MongoDB.
3- Agora, instale a gem executando o comando
1 |
bundle install |
4- Para gerar a configuração padrão execute
1 |
rails g mongoid:config |
Este comando criará o arquivo config/mongoid.yml contendo as configurações de conexão com o MongoDB.
5- Agora execute o seguinte scaffold
1 |
rails g scaffold author name:string age:integer |
O scaffold é um comando responsável por gerar o model, controller e views necessárias para realização de um crud.
Novo Documento
Faça um teste para saber se realmente é possível criar um novo documento no MongoDB
1- Inicie o serviço do MongoDB rodando
1 |
sudo service mongod start |
2- Levante sua aplicação com o comando
1 |
rails server |
Através de seu navegador acesse o link http://localhost:3000/authors/new e crie um novo Escritor.
3- Abra o terminal e conecte-se ao MongoDB executando
1 |
mongo |
3- Selecione o banco de dados que você irá utilizar
1 |
use mongo_app_development |
4- Faça uma pesquisa para ver os dados da collection Authors
1 |
db.authors.find().pretty() |
O primeiro documento da aplicação foi criado!
Associações
Aqui você criará um CRUD dos livros, definindo que cada livro será relacionado a um escritor através de uma associação referenciada.
1- Execute o scaffold para os livros
1 |
rails g scaffold book name:string publisher:string author:references |
2- No model app/models/book.rb, substitua a relação
1 |
embedded_in :author |
por
1 |
belongs_to :author |
Fizemos esta alteração para utilizar a associação referenciada, informando que o livro pertence a um autor.
3- Para definir que um escritor pode ser o autor de vários livros vá até o arquivo app/models/author.rb e adicione a seguinte instrução
1 |
has_many :books |
4- No arquivo app/views/books/_form.html.erb localize o seguinte text_field
1 |
<%= form.text_field :author_id %> |
Substitua ele pelo seguinte código
1 |
<%= form.collection_select(:author_id, Author.all, :id, :name) %> |
5- Substitua o código de app/views/books/show.html.erb por
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
<p id="notice"><%= notice %></p> <p> <strong>Name:</strong> <%= @book.name %> </p> <p> <strong>Publisher:</strong> <%= @book.publisher %> </p> <p> <strong>Author:</strong> <%= @book.author.name %> </p> <%= link_to 'Edit', edit_book_path(@book) %> | <%= link_to 'Back', books_path %> |
E o código de app/views/books/index.html.erb por
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
<p id="notice"><%= notice %></p> <h1>Books</h1> <table> <thead> <tr> <th>Name</th> <th>Publisher</th> <th>Author</th> <th colspan="3"></th> </tr> </thead> <tbody> <% @books.each do |book| %> <tr> <td><%= book.name %></td> <td><%= book.publisher %></td> <td><%= book.author.name %></td> <td><%= link_to 'Show', book %></td> <td><%= link_to 'Edit', edit_book_path(book) %></td> <td><%= link_to 'Destroy', book, method: :delete, data: { confirm: 'Are you sure?' } %></td> </tr> <% end %> </tbody> </table> <br> <%= link_to 'New Book', new_book_path %> |
Adicionando livros
Agora você pode adicionar novos livros relacionados a um escritor.
Veja os livros adicionados acessando http://localhost:3000/books
Flexibilidade
Como dito no começo desta publicação, a estrutura de dados do MongoDB é flexível.
Podemos, por exemplo, adicionar um novo field para salvar a nacionalidade dos próximos escritores a serem cadastrados.
1- Vá até o model app/models/author.rb e adicione o field nationality
1 |
field :nationality, type: String |
2- Adicione o text_field da nacionalidade substituindo o arquivo app/views/authors/_form.html.erb por
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
<%= form_with(model: author, local: true) do |form| %> <% if author.errors.any? %> <div id="error_explanation"> <h2><%= pluralize(author.errors.count, "error") %> prohibited this author from being saved:</h2> <ul> <% author.errors.full_messages.each do |message| %> <li><%= message %></li> <% end %> </ul> </div> <% end %> <div class="field"> <%= form.label :name %> <%= form.text_field :name %> </div> <div class="field"> <%= form.label :nationality %> <%= form.text_field :nationality %> </div> <div class="field"> <%= form.label :age %> <%= form.number_field :age %> </div> <div class="actions"> <%= form.submit %> </div> <% end %> |
3- Para imprimir a nacionalidade na exibição do autor altere o conteúdo de app/views/authors/show.html.erb para
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
<p id="notice"><%= notice %></p> <p> <strong>Name:</strong> <%= @author.name %> </p> <p> <strong>Age:</strong> <%= @author.age %> </p> <p> <strong>Nationality:</strong> <%= @author.nationality %> </p> <%= link_to 'Edit', edit_author_path(@author) %> | <%= link_to 'Back', authors_path %> |
E para exibir a nacionalidade na lista de autores substitua o conteúdo de app/views/author/index.html.erb por
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
<p id="notice"><%= notice %></p> <h1>Authors</h1> <table> <thead> <tr> <th>Name</th> <th>Age</th> <th>Nationality</th> <th colspan="3"></th> </tr> </thead> <tbody> <% @authors.each do |author| %> <tr> <td><%= author.name %></td> <td><%= author.age %></td> <td><%= author.nationality %></td> <td><%= link_to 'Show', author %></td> <td><%= link_to 'Edit', edit_author_path(author) %></td> <td><%= link_to 'Destroy', author, method: :delete, data: { confirm: 'Are you sure?' } %></td> </tr> <% end %> </tbody> </table> <br> <%= link_to 'New Author', new_author_path %> |
4- Não se esqueça de permitir o parâmetro nationality no controller app/controllers/authors_controller.rb
1 |
params.require(:author).permit(:name, :age, :nationality) |
5- Agora crie um novo autor informando sua nacionalidade
Perceba que apenas o novo autor possui o field nationality
Para conhecer mais sobre o Mongoid acesse sua documentação através deste link – Documentação do Mongoid
Conclusão
MongoDB é uma ótima opção para que você tenha um banco de dados escalável e de alta performance.
Por meio desta publicação foi possível demonstrar que sua integração não tem segredos e em poucos minutos sua aplicação já está fazendo uso desta tecnologia.

Não perca nenhum conteúdo
Receba nosso resumo semanal com os novos posts, cursos, talks e vagas o/
Primeira vez no OneBitCode? Curtiu esse conteúdo?
O OneBitCode tem muito mais para você!
O OneBitCode traz conteúdos de qualidade, e em português, sobre programação com foco em Ruby on Rails e também JavaScript.
Além disso, aqui sempre levamos à você conteúdos valiosos sobre a carreira de programação, dicas sobre currículos, portfólios, perfil profissional, soft skills, enfim, tudo o que você precisa saber para continuar evoluindo como Programador(a)!
Fique por dentro de todos os conteúdos o/
Nossas redes sociais:
📹 • https://youtube.com/Onebitcode [Live todas as terças-feiras às 19h)
💻 • pagan dating service
🙂 • sarah hyland dating
📱 • https://onebitcode.com/gay-story-sites/
🐦 • gay jewish dating
Nossos cursos:
🥇 • Programador Full Stack Javascript em 8 Semanas
💎 • Curso Completo de Ruby
⚙ • Minicurso: API Rails 5 Completo
🐞 • Minicurso de Testes para Ruby on Rails com RSpec
Espero que curta nossos conteúdos e sempre que precisar de ajuda, fala com a gente!
Estamos aqui para você 🙂
Bem-vindo à família OneBitCode o/