我有物品清单。这些项目可以属于多个列表。通过定义多对多关系可以轻松完成。
class List
include MongoMapper::Document
key :item_ids, Array
many :items, :in => :item_ids
end
但我也希望订购这些清单。项目可以在一个列表中的索引2上,而在另一个列表中的索引4上。通常我会使用一个带有'position'字段的连接表,但是我无法解决如何用MongoMapper完成这样的事情,因为每个人似乎都建议不要在无SQL环境中使用连接表(这使得完美感。)
在MongoDB中使用连接表是否是一个好主意,还是使用其他机制来完成此操作?和奖励点:我如何在MongoMapper中实现它?
答案 0 :(得分:0)
item_ids
是一个数组。因此,它将自然地排序 - 您只需按照您希望它们的顺序将项目插入items
关联。如果您想重新排序它们,只需对item_ids
进行排序按某些条件排列数组并保存文档,或者在从数组中使用它们时对项进行排序。
# When consuming the list
@list.items.sort_by &:name
# Or if you want to persist the order
@list.item_ids = @list.items.sort {|item| ... }.map(&:id)
@list.save