初期オブジェクトに空の配列を持たせようとすると、埋め込みを表す多くのドキュメントがあり、現在ドキュメントが埋め込まれていません。
ドキュメントが埋め込まれている場合、または埋め込まれたドキュメントをすべて削除した後、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 とは何の関係もないこの問題が発生して以来、私は認識しています。プルされない理由は、値を持つ属性のみがデータベースに配置されるためです。したがって、新しいオブジェクトを作成するとき、埋め込まれたドキュメントはまだ存在しないため、データベースには配置されません。したがって、レコードを要求すると、何らかの値を持つ属性が与えられるだけです。
通常の属性の場合、空白のデフォルトを作成することでこれを解決できます。ただし、多くの埋め込みにはデフォルトのオプションはありません。
関係を初期化して空の配列をデータベースに配置する方法を知っている人はいますか?