泵和零件之间有很多关系。我将Part ID存储在Pump文档中。我还想存储特定泵中使用的零件数量。
这就是我所拥有的,简而言之
class Pump
include MongoMapper::Document
key :number, String
key :desc, String
key :part_ids, Array
many :parts, :in => :part_ids
end
class Part
include MongoMapper::Document
attr_accessor :pump_ids
key :qty, Integer
key :number, String
key :desc, String
def pumps
Pump.all(:part_ids => self.id)
end
end
在我意识到每个泵使用的零件数量不同之前哪个工作正常,所以现在我需要存储关系的数量,以及其他一些关系特定信息,如笔记。
而不仅仅是存储和数组的ID我不喜欢这样的东西。
[{:pump_id => "12hj3hjkbrw", :qty = 4},
{:pump_id => "ggtyh5ehjrw", :qty = 10, :notes => "when using this part with this Pump please note this"}]
我不确定如何使这项工作。
答案 0 :(得分:0)
看起来你真的想要第三个模型,比如PartUsage或封装关系的东西。关键是你试图存储和使用关于关系本身的一些数据,这需要另一个模型(EmbeddedDocument是理想的)。
你可以这样做(小心:未经测试!):
class Pump
include MongoMapper::Document
key :number, String
key :desc, String
key :part_usage_ids, Array
many :part_usages
end
class Part
include MongoMapper::Document
key :qty, Integer
key :number, String
key :desc, String
def pumps
# not 100% sure of this query actually
PartUsage.all(:part_id => self.id).collect { |pu| pu.pump }
end
end
class PartUsage
include MongoMapper::EmbeddedDocument
belongs_to :pump
belongs_to :part
key :pump_id, ObjectId
key :part_id, ObjectId
key :qty, Integer
key :notes, String
end