Атрибуты обновления Mongoid: как не вставлять, если имена полей еще не существуют в коллекции

Я пытаюсь сделать update_attributes с Mongoid в приложении Rails 3.

Проблема, с которой я сталкиваюсь, заключается в следующем:

Допустим, моя коллекция имеет следующие поля:

{"Имя" : "foo", "email" : "bar" }

Вот сценарий

если я сделаю это:

@person = Person.where(:Name => "foo", :_id = "some_id")

и тогда я делаю это:

@person.update_attributes(:Name => "baba-fooka", :Last_Name => "baba-bara")

Строка кода выше обновляет запись в mongodb, а также добавляет новое поле в документ.

Как я могу использовать метод update_attributes с проверкой, которая не позволяет вставлять поля, которых еще нет?


person qwexar    schedule 15.08.2012    source источник


Ответы (1)


Похоже, что вы хотите, чтобы allow_dynamic_fields было установлено значение false в конфигурации монгоида файл. Динамические поля включены по умолчанию, что позволяет устанавливать и сохранять атрибуты в документе, даже если для них не было определено поле.

Войдите в config/mongoid.yml под набором параметров allow_dynamic_fields: false. Он уже должен быть там, но закомментирован и установлен в true. Убедитесь, что он говорит ложь.

person hadees    schedule 15.08.2012
comment
Благодарю. это именно то, что я пытался сделать. и allow_dynamic_fields: false сработало. Кажется, по умолчанию установлено значение true. - person qwexar; 18.08.2012