Есть ли какие -либо зарезервированные имена ключей в Mongomapper?
-
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), что стало бессмысленностью в этот момент. Я не знаю, как это исправить, чтобы у меня было поле «Обновление» в моей модели. Кто угодно?
Последующее наблюдение: кажется, метод экземпляра, который выполняет фактическое обновление, также называется: Обновление, поэтому он не поможет устранить использование этих токенов для обратных вызовов. Скорее, это всего лишь случай столкновения с методом экземпляров, который вызывает гораздо более странную ошибку, поскольку он сначала используется в качестве типа обратного вызова, прежде чем использовать в качестве метода.