2016-11-15 68 views
0

我建立一个数据库的Ruby on使用Mongoid包括以下三个集合住宅,地图,以及路由器的Rails:如何使用Ruby on Rails将文档(ObjectId)添加到has_many和has_and_belongs_to_many关系中?

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 

我目前有一个居住证件,一份地图文件和一份路由器文件。我的问题是如何实现文档之间的has_many,belongs_to和has_and_belongs_to_many关系,以便居住文档引用路由器的_id和地图的_id,地图文档引用路由器的_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

我明白如何定义模型中的关系。我的问题是如何插入文件,同时指定哪些文件与之相关。 –

相关问题