Ruby on Rails
Mongoide
Buscar..
Instalación
Primero, agregue Mongoid
a su Gemfile
:
gem "mongoid", "~> 4.0.0"
y luego ejecute bundle install
. O simplemente ejecuta:
$ gem install mongoid
Después de la instalación, ejecute el generador para crear el archivo de configuración:
$ rails g mongoid:config
que creará el archivo (myapp)/config/mongoid.yml
.
Creando un modelo
Crea un modelo (llamémoslo User
) ejecutando:
$ rails g model User
que generará el archivo app/models/user.rb
:
class User
include Mongoid::Document
end
Esto es todo lo que necesita para tener un modelo (aunque nada más que un campo de id
). A diferencia de ActiveRecord
, no hay archivos de migración. Toda la información de la base de datos para el modelo está contenida en el archivo del modelo.
Las marcas de tiempo no se incluyen automáticamente en su modelo cuando lo genera. Para agregar created_at
y updated_at
a su modelo, agregue
include Mongoid::Timestamps
debajo de tu modelo include Mongoid::Document
como:
class User
include Mongoid::Document
include Mongoid::Timestamps
end
Campos
Según la documentación de Mongoid , hay 16 tipos de campos válidos:
- Formación
- BigDecimal
- Booleano
- Fecha
- Fecha y hora
- Flotador
- Picadillo
- Entero
- BSON :: ObjectId
- BSON :: Binario
- Distancia
- Regexp
- Cuerda
- Símbolo
- Hora
- TimeWithZone
Para agregar un campo (llamémoslo name
y que sea una String
), agregue esto a su archivo modelo:
field :name, type: String
Para establecer un valor predeterminado, simplemente pase la opción default
:
field :name, type: String, default: ""
Asociaciones clásicas
Mongoid permite las asociaciones clásicas de ActiveRecord
:
- Uno a uno:
has_one
/belongs_to
- Uno a muchos:
has_many
/belongs_to
- Muchos a muchos:
has_and_belongs_to_many
Para agregar una asociación (digamos que el usuario tiene has_many
publicaciones), puede agregar esto a su archivo de modelo de User
:
has_many :posts
y esto a tu archivo de modelo de Post
:
belongs_to :user
Esto agregará un campo user_id
en su modelo de Post
, agregará un método de user
a su clase de Post
y agregará un método de posts
a su clase de User
.
Asociaciones incrustadas
Mongoid permite Asociaciones Incrustadas:
- Uno a uno:
embeds_one
/embedded_in
- Uno a muchos:
embeds_many
/embedded_in
Para agregar una asociación (digamos el usuario embeds_many
direcciones), agregue esto a su archivo de User
:
embeds_many :addresses
Y esto a su archivo de modelo de Address
:
embedded_in :user
Esto incorporará la Address
en su modelo de User
, agregando un método de addresses
a su clase de User
.
Llamadas a bases de datos
Mongoid intenta tener una sintaxis similar a ActiveRecord
cuando puede. Soporta estas llamadas (y muchas más).
User.first #Gets first user from the database
User.count #Gets the count of all users from the database
User.find(params[:id]) #Returns the user with the id found in params[:id]
User.where(name: "Bob") #Returns a Mongoid::Criteria object that can be chained
#with other queries (like another 'where' or an 'any_in')
#Does NOT return any objects from database
User.where(name: "Bob").entries #Returns all objects with name "Bob" from database
User.where(:name.in => ['Bob', 'Alice']).entries #Returns all objects with name "Bob" or "Alice" from database
User.any_in(name: ["Bob", "Joe"]).first #Returns the first object with name "Bob" or "Joe"
User.where(:name => 'Bob').exists? # will return true if there is one or more users with name bob