我正在试图弄清楚如何建立设备/服务关系。 我正在使用Rails 3和MongoDB / Mongoid。 Rails应用程序用于监控IP网络。
在用户手动添加设备的视图中,我需要一些允许他们选择的方法 他们希望应用程序监控的服务。
此外,如果用户尝试运行自动设备发现,我想浏览该应用支持的服务并查询设备以查看该设备是否支持该服务。
最后,作业以一定的间隔运行,以从数据库中的每个设备提取新数据。 在该轮询作业中,我需要一些方法来查询与设备关联的每个服务,然后保存特定于设备/服务关系的数据(服务上/下等)。这就是我被困住的地方。我不知道该怎么做。 我需要第三个型号吗?如何在模型中指定此数据? 或者也许我认为这一切都错了,有一种更好的表达方式 我想做什么?
这就是我的模型代码现在的样子:
device.rb
class Device
include Mongoid::Document
field :name
field :ip_address
references_many :services
def polll
# psuedocode
for each service
query service
end
# save data back to DB
update_attributes(...)
end
end
service.rb
class Service
include Mongoid::Document
field :name
field :description
references_many :devices
end
答案 0 :(得分:0)
在关系数据库中,您实际需要的是使用指定的连接模型进行 has_many到调用。
class Device
has_many :ports
has_many :services, :through => :ports
end
在这里,您将对服务模型执行相同操作,并添加端口模型作为连接模型。但是,由于您使用的是Mongo,我建议您将Service嵌入到Device中。这使得查询变得更加容易,并且如果没有设备存在,就不应该管理服务。不要担心数据重复,因为您拥有的是更自然的数据模型表示。
这是Mongoid关联语法的文档页面,包括嵌入式语法,http://mongoid.org/docs/associations/