2010-06-25 69 views

回答

2

第一個問題很容易回答自己。打開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密鑰中的任何內容。

3

_id和_type。此外,任何可以創建與mongomapper doc/edoc實例方法相同的方法(如關聯等)的任何東西。

0

下面是John Nunemaker的答案的具體示例。

我發現硬盤的方式,下面的令牌在對象的實例代碼中引用,因此將使用相同的名稱(mongo_mapper /插件/ callbacks.b)的任意鍵衝突:

:destroy 
:save 
:create 
:update 

如果你定義

key :update, Integer 

,那麼你就可以獲取,刪除,POST,但不能把因爲這將嘗試調用run_callbacks(:更新),已在該點成爲無稽之談。我不知道如何解決這個問題,這樣我可以在模型中創建一個名爲「update」的字段。任何人?

後續操作:看來執行實際更新的實例方法也被稱爲:update,所以它無助於消除這些回調的使用。相反,這僅僅是一個碰撞實例方法的情況,該方法在被用作方法之前會導致更多的錯誤,因爲它被用作回調類型FIRST。