2016-11-15 19 views
0

私は、次の3つのコレクションレジデンス、地図、およびルータが含まMongoidを使ってRuby on Railsにデータベースを構築しています:MongoidでRuby on Railsを使用してhas_manyとhas_and_belongs_to_manyの関係にドキュメント(ObjectId)を追加する方法は?

residence.rbを

class Residence 
    include Mongoid::Document 
    include Mongoid::Timestamps 
    include Mongoid::Geospatial 

    has_many :maps, inverse_of: :residence 
    has_many :routers, inverse_of: :residence 

    field :address, type: String 
    field :resident, type: String 

end 

map.rb

class Map 
    include Mongoid::Document 
    include Mongoid::Timestamps 
    include Mongoid::Geospatial 

    belongs_to :residence, inverse_of: :maps 
    has_and_belongs_to_many :routers, inverse_of: :maps 
    embeds_many :pins 

    field :name, type: String 

    spatial_index "pins.loc" 

end 

router.rb

class Router 
    include Mongoid::Document 
    include Mongoid::Timestamps 
    include Mongoid::Geospatial 

    belongs_to :residence, inverse_of: :routers 
    has_and_belongs_to_many :maps, inverse_of: :routers 

    field :loc, type: Point 
    field :MAC, type: String 
    field :name, type: String 
    field :serial, type: String 

    spatial_index :loc 

end 

私は現在1つ持っています1つのマップ文書、および1つのルータ文書を含む。私の質問は、居住文書がルータの_idとマップの_idを参照するように、文書の間にhas_many、belongs_to、has_and_belongs_to_manyの関係を実装する方法です。マップ文書はルータの_idを参照し、ルータ参照マップの_id。

ご迷惑をおかけして申し訳ありませんが、ご協力いただきありがとうございます。

編集:以下の関係の説明です。 各レジデンスごとに、多数のマップ(異なるデータを表示)を生成できます。各レジデンスにはルータがありますが、複数のルータがある場合があります。ルーターはマップに含まれていますが、マップなしで存在する可能性があるため、組み込むべきではありません。

答えて

0

私がいない場合、それは

class Residence 
    has_many :routers 
    has_many :maps 
end 

class Map 
    has_many :routers 
end 

class Router 
    belongs_to :map 
end 

なる必要がありますね、あなたは、これらのオブジェクト間の実世界の関係を説明してくださいできますか?

+0

各レジデンスごとに(異なるデータを表示する)多くのマップを生成できます。各レジデンスにはルータがありますが、複数のルータがある場合があります。ルーターはマップに含まれていますが、マップなしで存在する可能性があるため、組み込むべきではありません。 –

+0

あなたのコメントに基づいて関連付けを変更しました。 –

+0

私はモデルの関係を定義する方法を理解しています。私の質問は、関連するドキュメントを指定してドキュメントを挿入する方法です。 –

関連する問題