Join us at MongoDB.local London on 7 May to unlock new possibilities for your data. Use WEB50 to save 50%.
Register now >
Docs Menu
Docs Home
/ /

Integrar Mongoid con Sinatra

En esta guía, puedes aprender a crear una aplicación web de Mongoid que utiliza Sinatra como framework web. Sinatra es un lenguaje específico de dominio (DSL) para crear aplicaciones web en Ruby. Las aplicaciones de Sinatra son sencillas de configurar y pueden proporcionar un procesamiento de solicitudes más rápido que otros frameworks.

La aplicación en este tutorial consta de las siguientes capas:

  • Capa de base de datos: MongoDB proporciona almacenamiento y recuperación de datos.

  • Capa de aplicación: Sinatra maneja las solicitudes HTTP, las rutas y el procesamiento lógico.

  • Capa de presentación: las plantillas Embedded Ruby renderizan los datos del restaurante en las páginas web.

Tip

Para aprender a integrar Mongoid en una aplicación existente, consulte Guía para Agregar Mongoid a una Aplicación Existente.

Al integrar MongoDB con Mongoid y Sinatra, se puede usar el Object-Document Mapper (ODM) de Mongoid para interactuar con el flexible modelo de documentos de MongoDB. Mongoid proporciona una alternativa ligera al ORM Active Record de Rails, y se puede aprovechar la flexibilidad de esquemas de MongoDB mientras se utiliza el enfoque minimalista de Sinatra para controlar fácilmente cómo se modelan y muestran los datos.

Este tutorial le muestra cómo crear una aplicación web con Ruby y Sinatra. La aplicación accede a datos de muestra de restaurantes, los consulta y muestra los resultados en un sitio web alojado localmente. El tutorial también incluye instrucciones para conectarse a un clúster de MongoDB alojado en MongoDB Atlas y acceder y mostrar datos de su base de datos.

Sigue los pasos de esta sección para instalar las dependencias del proyecto, crear un clúster de Atlas y configurar la estructura de la aplicación.

1

Antes de crear la aplicación Quick Start, instala el siguiente software en tu entorno de desarrollo:

Requisito previo
notas

Ruby

Usa la versión 3.1 o posterior.

Este es un gestor de paquetes para Ruby.

Editor de código

Usa el editor de código de tu preferencia.

Aplicación de terminal y shell

Para usuarios de macOS, usen Terminal o una aplicación similar. Para usuarios de Windows, usen PowerShell.

2

MongoDB Atlas es un servicio de base de datos en la nube completamente gestionado que aloja tus implementaciones de MongoDB. Si no tienes una implementación de MongoDB, puedes crear un clúster de MongoDB de forma gratuita al completar el Tutorial de Introducción a MongoDB. El tutorial Get Started de MongoDB también demuestra cómo cargar conjuntos de datos de muestra en tu clúster, incluido el sample_restaurants base de datos que se emplea en este tutorial.

Para conectarte a tu clúster de MongoDB, debes usar un URI de conexión. Para saber cómo recuperar tu URI de conexión, consulta la sección Agrega tu cadena de conexión del tutorial Primeros pasos de MongoDB.

Importante

Guarda tu cadena de conexión en una ubicación segura.

3

Al conectarse a un clúster de Atlas, se debe especificar la base de datos con la que se desea interactuar como la base de datos predeterminada en la cadena de conexión. Debe añadir el nombre de la base de datos a su cadena de conexión después del nombre de host y antes de las opciones de conexión.

El siguiente ejemplo especifica la base de datos de destino sample_restaurants en una cadena de conexión de muestra:

mongodb+srv://user0:pass123@mongo0.example.com/sample_restaurants?retryWrites=true&w=majority

La cadena de conexión de muestra incluye la base de datos después del nombre del host mongo0.example.com y antes de las opciones de conexión retryWrites y w.

4

Ejecuta los siguientes comandos para crear un nuevo directorio de aplicación llamado my-sinatra-app y navega hacia él:

mkdir my-sinatra-app
cd my-sinatra-app
5

Todas las aplicaciones Ruby deben tener un Gemfile que enumere los gemas requeridas. Ejecute el siguiente comando para crear un Gemfile en su aplicación:

touch Gemfile

A continuación, ejecuta los siguientes comandos para agregar e instalar las gemas requeridas en el Gemfile:

bundle add mongoid sinatra rackup webrick
bundle install

Después de configurar la estructura y las dependencias del proyecto, siga los pasos de esta sección para conectarse a MongoDB y configurar sus modelos de datos.

1

En tu directorio my-sinatra-app, crea un subdirectorio config. Luego, crea un archivo en este subdirectorio llamado mongoid.yml.

Pegue el siguiente código en el archivo mongoid.yml:

mi-aplicación-sinatra/config/mongoid.yml
development:
clients:
default:
uri: <connection string>

Reemplace el marcador de posición <connection string> con el URI de conexión que guardó en un paso anterior. Verifique que el URI incluya el nombre de la base de datos sample_restaurants.

2

En tu directorio my-sinatra-app, crea un archivo llamado app.rb. Pega el siguiente contenido en el archivo app.rb para cargar las gemas necesarias y tu archivo de configuración:

mi-aplicación-sinatra/app.rb
require 'sinatra'
require 'mongoid'
Mongoid.load!(File.join(File.dirname(__FILE__), 'config', 'mongoid.yml'))
3

En el archivo app.rb, crea un modelo llamado Restaurant agregando el siguiente código:

mi-aplicación-sinatra/app.rb
class Restaurant
include Mongoid::Document
field :name, type: String
field :cuisine, type: String
field :borough, type: String
end

El modelo Restaurant representa la colección restaurants en la base de datos sample_restaurants. Define los campos name, cuisine y borough para almacenar datos de restaurantes.

4

En el archivo app.rb, añada las siguientes rutas para mostrar los datos del restaurante:

mi-aplicación-sinatra/app.rb
get '/' do
@restaurants = Restaurant.all
erb :index
end
get '/browse' do
@restaurants = Restaurant
.where(name: /Moon/i).and(borough: "Queens")
erb :browse
end

La ruta / muestra todos los restaurantes, mientras que la ruta /browse query los restaurantes en Queens que tienen "Moon" en su nombre usando una coincidencia sin distinguir mayúsculas o minúsculas.

Después de configurar la capa de datos, siga los pasos de esta sección para crear plantillas para la interfaz de usuario.

1

En tu directorio my-sinatra-app, crea un subdirectorio llamado views.

Luego, crea un archivo en el subdirectorio views llamado layout.erb y pega el siguiente código:

mi-aplicación-sinatra/vistas/diseño.erb
<!DOCTYPE html>
<html>
<head>
<title>Restaurant Directory</title>
<style>
body {
font-family: Arial, sans-serif;
margin: 0;
padding: 20px;
background-color: #a8d5ba;
}
.header {
text-align: center;
margin-bottom: 30px;
}
.nav {
text-align: center;
margin-bottom: 20px;
}
.nav a {
text-decoration: none;
color: #6a9bd2;
margin: 0 10px;
font-size: 16px;
}
.container {
max-width: 1200px;
margin: 0 auto;
background: white;
padding: 20px;
border-radius: 10px;
}
.restaurant-grid {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));
gap: 20px;
margin-top: 20px;
}
.restaurant-card {
background: #f8f9fa;
padding: 20px;
border-radius: 8px;
border: 1px solid #ddd;
}
.restaurant-card h3 {
margin-top: 0;
color: #333;
}
.cuisine-tag {
background: #4a9d5f;
color: white;
padding: 4px 8px;
border-radius: 4px;
font-size: 12px;
display: inline-block;
}
</style>
</head>
<body>
<div class="header">
<h1>Restaurant Directory</h1>
</div>
<div class="nav">
<a href="/">All Restaurants</a>
<a href="/browse">Browse Filtered Restaurants</a>
</div>
<div class="container">
<%= yield %>
</div>
</body>
</html>

Este archivo es una plantilla ERB (Embedded Ruby). Estas plantillas incluyen HTML con código Ruby incrustado para generar contenido HTML dinámico.

2

En el subdirectorio views, cree un archivo llamado index.erb y pegue el siguiente código:

mi-aplicación-sinatra/vistas/index.erb
<h2>All Restaurants</h2>
<p>Total restaurants: <%= @restaurants.count %></p>
<div class="restaurant-grid">
<% @restaurants.each do |restaurant| %>
<div class="restaurant-card">
<h3><%= restaurant.name %></h3>
<p><strong>Borough:</strong> <%= restaurant.borough %></p>
<span class="cuisine-tag"><%= restaurant.cuisine %></span>
</div>
<% end %>
</div>

Este archivo de vista muestra todos los restaurantes en una estructura de cuadrícula en la interfaz de usuario de la aplicación.

3

En el subdirectorio views, cree un archivo llamado browse.erb y pegue el siguiente código:

my-sinatra-app/views/browse.erb
<h2>Browse Restaurants</h2>
<p>Restaurants in Queens with "Moon" in the name</p>
<h3>Filtered Results</h3>
<div class="restaurant-grid">
<% @restaurants.each do |restaurant| %>
<div class="restaurant-card">
<h3><%= restaurant.name %></h3>
<p><strong>Borough:</strong> <%= restaurant.borough %></p>
<span class="cuisine-tag"><%= restaurant.cuisine %></span>
</div>
<% end %>
</div>

Este archivo de vista muestra los restaurantes de la ruta personalizada browse, que filtra los restaurantes en Queens que tienen "Moon" en su nombre.

Por último, sigue los pasos de esta sección para ejecutar tú aplicación web y explorar los datos del restaurante mediante la interfaz del navegador.

1

Navegue al directorio de su proyecto y ejecute el siguiente comando:

bundle exec ruby app.rb

Este comando inicia un servidor web en el puerto 4567, el puerto predeterminado de Sinatra. Si se ejecuta correctamente, la salida del comando se parece al siguiente ejemplo:

[2024-10-01 12:36:49] INFO WEBrick 1.8.2
[2024-10-01 12:36:49] INFO ruby 3.2.5 (2024-07-26) [arm64-darwin23]
== Sinatra (v4.0.0) has taken the stage on 4567 for development with backup from WEBrick
[2024-10-01 12:36:49] INFO WEBrick::HTTPServer#start: pid=79176 port=4567
2

Abra http://localhost: en su navegador web. La página de inicio muestra todos los restaurantes de la4567 sample_restaurants.restaurants colección, en el orden en que aparecen en la base de datos:

La página web que muestra todos los restaurantes

Luego, haga clic en el Browse Filtered Restaurants Enlace para ver restaurantes en Queens que tienen "Moon" en su nombre:

La página web que muestra restaurantes filtrados

¡Felicitaciones por completar el tutorial de inicio rápido de Sinatra! Una vez que completes estos pasos, tendrás una aplicación web Ruby y Sinatra que se conecta a tu implementación de MongoDB, ejecuta consultas en datos de muestra de restaurantes y muestra los resultados en una interfaz web alojada localmente.

Para obtener más información sobre Ruby, Sinatra, Mongoid y MongoDB, consulte los siguientes recursos:

Tip

Otros tutoriales de Framework

Si prefieres usar Rails como tu framework web, consulta la guía Integrar Mongoid con Ruby on Rails.

Volver

Primeros pasos: Ruby on Rails

En esta página