Есть ли какие -либо зарезервированные имена ключей в Mongomapper?

StackOverflow https://stackoverflow.com/questions/3115916

  •  29-09-2019
  •  | 
  •  

Вопрос

Могу ли я объявить модель с ключом, называемым :key, например? Есть ли слово я не мочь использовать для ключа?

Это было полезно?

Решение

Первый вопрос, если очень легко ответить на себя. Откройте IRB и попробуйте:

>> 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">]

Нет ошибок? Наверное key это действительный ключ!

Насколько я знаю, единственные ключи, которые вы не должны использовать для своих собственных данных, - это _id а также _type. Анкет Ты Можно Используйте либо, но они изменят поведение. С использованием _id Сделает все, что вы настраиваете, как этот ключ - уникальный идентификатор для объекта. С использованием _type заставит Mongomapper попытаться создать экземпляр того, что находится в вашем _test Ключ при возвращении объекта обратно из базы данных.

Другие советы

_id и _type. Кроме того, любая вещь, которая создаст метод, такой же, как метод экземпляра DOC/EDOC Mongomapper, такой как ассоциации и т. Д.

Вот конкретный пример ответа Джона Нунемакера.

Я обнаружил, что жесткий способ ссылается на следующие токены в коде экземпляра вашего объекта и, следовательно, столкнется с любым клавиш с одинаковым именем (Mongo_mapper/Plugins/callbacks.b):

:destroy
:save
:create
:update

Если вы определите

key :update, Integer

Тогда вы сможете получить, удалять, публиковать, но не положить, потому что это попытается вызовать run_callbacks (: update), что стало бессмысленностью в этот момент. Я не знаю, как это исправить, чтобы у меня было поле «Обновление» в моей модели. Кто угодно?

Последующее наблюдение: кажется, метод экземпляра, который выполняет фактическое обновление, также называется: Обновление, поэтому он не поможет устранить использование этих токенов для обратных вызовов. Скорее, это всего лишь случай столкновения с методом экземпляров, который вызывает гораздо более странную ошибку, поскольку он сначала используется в качестве типа обратного вызова, прежде чем использовать в качестве метода.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top