Mongoidのモデル間参照について備忘録
参照関係(Relation)を作るにはMongoidのモデルで以下を指定する。
- references_one
- references_mary
- referenced_in
使い方に注意が必要で、例えば Parent, Childな関係の場合
class Parent include Mongoid::Document references_many :child end class Child include Mongoid::Document referenced_in :parent end
という事になる。embed_many, embedded_in の関係と対比するとわかりやすいかも。
この時、普通のRDBだとChildテーブルにparent_idが入る点ではMongoDBも同じだが、Mongoidで違う点は、参照関係を作る際にEmbedを踏襲する点。
上記の例だと、こんな風になる。
@parent = Parent.new @child = Child.new @parent.child << @child # @child.parent = @parent ではない
ちなみに、コメントアウトした方でもエラーにならない。しばらく迷ったのは秘密。
Parentを変更する場合は単純にもう一度実行する。
@parent_other = Parent.new @parent_other.child << @child @parent.child.first #=> nil
自動的に以前の @parent からは排除された形になる。