¿Hay nombres clave reservadas en MongoMapper?
-
29-09-2019 - |
Pregunta
¿Podría declarar un modelo con una clave llamada :key
, por ejemplo? ¿Hay alguna palabra que no puede el uso de una clave?
Solución
La primera pregunta que si es muy fácil de responder sí mismo. IRB abierta y tratar:
>> require 'mongo_mapper'
=> true
>> MongoMapper.database = 'test'
=> "test"
>> class Test
>> include MongoMapper::Document
>> key :key
>> end
=> #<MongoMapper::Plugins::Keys::Key:0x101fc7a90 @default_value=nil, @type=nil, @name="key", @options={}>
>> t = Test.new(:key => 'value')
=> #<Test _id: BSON::ObjectID('4c4dcced7123374587000001'), key: "value">
>> t.save
=> true
>> Test.all
=> [#<Test _id: BSON::ObjectID('4c4dcced7123374587000001'), key: "value">]
No hay errores? Supongo key
es una clave válida!
Por lo que yo sé, las únicas teclas que no se debe utilizar para sus propios datos son _id
y _type
. Usted puede utilizar cualquiera, sino que va a cambiar el comportamiento. Usando _id
hará todo lo que está configurando como la clave del identificador único para el objeto. Usando _type
causará MongoMapper para tratar de crear una instancia de cualquier cosa que esté en su clave _test
cuando se lleva la parte posterior objeto de la base de datos.
Otros consejos
_id y _type. Además, cualquier cosa que crearía un método de la misma como un método MongoMapper doc / edoc ejemplo, tales como asociaciones, etc.
Aquí hay un ejemplo concreto de la respuesta de Juan Nunemaker.
He encontrado la manera dura que las siguientes fichas se hace referencia en el código de ejemplo de su objeto y, por tanto, chocarán con cualquier tecla del mismo nombre (mongo_mapper / plugins / callbacks.b):
:destroy
:save
:create
:update
Si define
key :update, Integer
entonces usted será capaz de obtener, BORRAR, POST, PUT, pero no porque eso va a tratar de llamar run_callbacks (actualización): que se ha convertido sin sentido en ese momento. No sé cómo arreglar eso para que pueda tener un campo llamado "actualización" en mi modelo. Cualquier persona?
Seguimiento: Parece que el método de instancia que realiza la actualización real también se llama: actualización, por lo que no ayuda a eliminar el uso de estas fichas para devoluciones de llamada. Más bien, este es sólo un caso de colisión con un método de instancia que causa un error más extraño mucho ya que se utiliza como un tipo de devolución de llamada primero, antes de ser utilizado como un método.