Новые записи MongoMapper содержат данные старых записей - PullRequest
0 голосов
/ 30 августа 2011

В нашей среде приложения Rails (ruby 1.8.7 / rails 2.3.12) я могу запустить следующий код:

class MongoTester
  include MongoMapper::Document
  key :test_arr, Array, :default => []
end

mt = MongoTester.new
mt.test_arr << 24

mt2 = MongoTester.new

Вывод mt2.inspect:

 #<MongoTester test_arr: [24], _id: BSON::ObjectId('4e5c089f3beaacad00000002')>

Я не уверен, как это возможно. object_id и _id для обеих записей разные. Ни один из них не спасен. Мы не модифицировали MongoMapper в нашем приложении (mongomapper 0.8.6). Тем не менее, совершенно новая запись содержит данные ранее созданной другой записи.

Я не могу воспроизвести это в тестовом наборе MongoMapper.

Любая информация о том, как этот эффект возможен или как я могу от него избавиться, была бы потрясающей. Спасибо!

1 Ответ

2 голосов
/ 30 августа 2011

Это ошибка: подайте ее на https://github.com/jnunemaker/mongomapper/issues/new Эта ошибка исправлена ​​в более новых версиях MongoMapper

Вот обходной путь:

key :test_arr, Array, :default => lambda { [] }

Это потому, что массивы в Ruby являются изменяемыми, поэтому ваш объект массива по умолчанию добавляется каждый раз с <<.Object_id ваших документов будет отличаться, но object_id массивов будет таким же.

...