2015-03-19 56 views
0

嘗試讓我的初始對象具有空數組表示嵌入的文件當前沒有嵌入文檔。爲新初始化的父對象獲取mongoid的bson文檔上的空數組

當嵌入文檔或刪除所有嵌入式文檔後,我可以在json字符串中獲得關係。但在嵌入任何文檔之前,我沒有在json字符串中獲得屬性character_classes。

您可以在IRB輸出的下方和下方看到我的模型,以顯示使用to_json和as_document時所得到的結果。第一組我沒有得到添加和刪除後,我做的character_classes ...

問題:我如何獲得初始設置傳遞character_classes作爲一個空的數組?

===========模型==========================

class Character 
    include Mongoid::Document 
    include Mongoid::Timestamps 

    embeds_many :character_classes 
end 

class CharacterClasses 
    include Mongoid::Document 
    include Mongoid::Timestamps 

    embeds_in :character_classes 

    field :title 
    field :character_level 
end 

= ========= IRB ==============================

> char = Character.first

=> #<Character _id: 550a1bd94e696383d1020000, created_at: 2015-03-19 00:44:09 UTC, updated_at: 2015-03-19 00:44:09 UTC>

> char.character_classes

=> []

> char.as_document

=> {"_id"=>BSON::ObjectId('550a1bd94e696383d1020000'), "updated_at"=>2015-03-19 00:44:09 UTC, "created_at"=>2015-03-19 00:44:09 UTC}

> char.to_json

=> "{\"_id\":{\"$oid\":\"550a1bd94e696383d1020000\"},\"created_at\":\"2015-03-19T00:44:09.232Z\",\"updated_at\":\"2015-03-19T00:56:01.257Z\"}"

> char.character_classes.create(title: "data")

=> [#<CharacterClass _id: 550a1d914e69638730000000, title: "data", character_level: 1>]

> char.as_document => {"_id"=>BSON::ObjectId('550a1bd94e696383d1020000'), "updated_at"=>2015-03-19 00:44:09 UTC, "created_at"=>2015-03-19 00:44:09 UTC, "character_classes"=>[{"_id"=>BSON::ObjectId('550a1d914e69638730000000'), "title"=>"data", "character_level"=>1}]}

> char.to_json

=>"{\"_id\":{\"$oid\":\"550a1bd94e696383d1020000\"},\"character_classes\":[{\"_id\":{\"$oid\":\"550a20a74e69638730010000\"},\"character_level\":1,\"title\":\"data\"}],\"created_at\":\"2015-03-19T00:44:09.232Z\",\"updated_at\":\"2015-03-19T00:56:01.257Z\"}"

> char.character_classes.destroy_all

=> 1

> char.character_classes

=> []

> char.as_document => {"_id"=>BSON::ObjectId('550a1bd94e696383d1020000'), "updated_at"=>2015-03-19 00:44:09 UTC, "created_at"=>2015-03-19 00:44:09 UTC, "character_classes"=>[]}

> char.to_json

=> "{\"_id\":{\"$oid\":\"550a1bd94e696383d1020000\"},\"character_classes\":[],\"created_at\":\"2015-03-19T00:44:09.232Z\",\"updated_at\":\"2015-03-19T00:56:01.257Z\"}"

編輯

我已經意識到,因爲有這個問題是有沒有關係to_json或as_document。它沒有被拉的原因是因爲只有具有值的屬性被放置在數據庫中。因此,在創建新對象時,由於嵌入式文檔尚不存在,因此不會將其放置在數據庫中。所以當我要求記錄時,它只是給出具有某種價值的屬性。

對於正常的屬性,我可以通過設置一個空白的默認值來解決這個問題。但是,嵌入許多內容時沒有默認選項。

有誰知道如何初始化關係,以便將一個空數組放入數據庫中?

+0

這很重要,因爲在另一方面,我正在對此屬性運行map(javascript - react),並努力不要額外添加邏輯來檢查該屬性是否存在。 – nejohannsen 2015-03-19 18:07:52

回答