2010-06-29 57 views
0

當通過MongoMapper將密鑰添加到現有模型(包含現有數據)時,我可以使用新密鑰創建新文檔,但是當嘗試使用同一個密鑰訪問現有文檔時,這是一個「未定義的方法」。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第一個文件。

的Rails 2.3.4

MongoMapper 0.7.4

+0

湯姆,你可以發佈代碼提取,因爲我沒有看到這種行爲。哦,你正在運行哪個版本的MongoDB和MongoMapper? – Joc 2010-06-30 01:52:23

+0

我剛更新了它。 – Tom 2010-06-30 16:02:56

回答

0

我沒有看到這種行爲在所有的,即使與我更新了之前類實例化一個對象進行交互。當運行在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 

因爲它似乎像你有一個不尋常的問題,你的用例的更多細節將是有益的。您能否給我們一個更完整的代碼示例?如果您的代碼中存在專利內容,那麼請將其歸爲所需的最小案例,以使其失敗併發布模型的完整聲明以及您用於訪問它們的代碼。

0

使用set命令

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

此代碼將創建一個新的領域模型,確認您已經沒有新的關鍵定義:

key :key_3 

享受,