MongoMapper - обновление существующих записей новыми ключами - PullRequest
0 голосов
/ 30 июня 2010

При добавлении ключа к существующей модели (с существующими данными) через MongoMapper я могу создавать новые документы с новым ключом, но при попытке получить доступ к существующим документам с использованием того же ключа он не сообщает, что это «неопределенный метод».

Мне было интересно, есть ли у кого-нибудь понимание.

Заранее спасибо!

(Да, эти примеры усечены.)

- model.rb -

key :key_1
key :key_2

- would return -
#<Model _id: BSON::ObjectID('4ba821abebddb9094c000001'), key_1: "test", key_2: "test">


- model.rb (updated version) -

key :key_1
key :key_2
key :key_3

- would still only return -
#<Model _id: BSON::ObjectID('4ba821abebddb9094c000001'), key_1: "test", key_2: "test">

- but if a new doc is created - 
#<Model _id: BSON::ObjectID('4ba821abebddb9094c000001'), key_1: "test", key_2: "test">
#<Model _id: BSON::ObjectID('7ba131abedaab9094c007482'), key_1: "test", key_2: "test", key_3: "test">

Это будет хорошо, за исключением того, что я получаю неопределенную ошибку метода при попытке доступа: key_3 для первого документа.

Рельсы 2.3.4

MongoMapper 0.7.4

Ответы [ 2 ]

0 голосов
/ 19 августа 2014

Используйте команду set ...

    @model.set(:key_3 => "VALUE...")
    @model.reload
    @model.key_3 # => "VALUE..."
    @model.save

Этот код создаст новое поле для вашей модели, подтвердите, что вы уже определились с новым ключом:

    key :key_3

Наслаждайтесь,

0 голосов
/ 26 июля 2010

Я вообще не вижу такого поведения, даже когда взаимодействую с объектом, созданным до обновления класса. При запуске следующего в IRB, у меня нет ошибок:

>> gem 'mongo_mapper', '0.7.4'
=> true
>> require 'mongo_mapper'
=> true
>> MongoMapper.database = 'test'
=> "test"
>> class Foo
>>   include MongoMapper::Document
>>   key :something
>>   end
=> #<MongoMapper::Plugins::Keys::Key:0x101f8f938 @default_value=nil, @type=nil, @name="something", @options={}>
>> f = Foo.new(:something => 'thing')
=> #<Foo _id: ObjectID('4c4dc9af712337447c000001'), something: "thing">
>> f.save
=> true
>> f
=> #<Foo _id: ObjectID('4c4dc9af712337447c000001'), something: "thing">
>> class Foo
>>   key :something_else
>>   end
=> #<MongoMapper::Plugins::Keys::Key:0x101f6ad90 @default_value=nil, @type=nil, @name="something_else", @options={}>
>> f
=> #<Foo something_else: nil, _id: ObjectID('4c4dc9af712337447c000001'), something: "thing">
>> f.something_else
=> nil

Поскольку кажется, что у вас необычная проблема, вам могут помочь подробности вашего варианта использования. Не могли бы вы дать нам более полный пример кода? Если в коде есть проприетарный материал, который не работает, уменьшите его до минимального значения, необходимого для его устранения, и опубликуйте полные объявления ваших моделей и код, который вы используете для доступа к ним.

...