Pregunta

¿Podría declarar un modelo con una clave llamada :key, por ejemplo? ¿Hay alguna palabra que no puede el uso de una clave?

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top