MongoMapper和“连接表”具有属性

时间:2013-08-29 10:19:57

标签: ruby-on-rails mongodb mongomapper

我有物品清单。这些项目可以属于多个列表。通过定义多对多关系可以轻松完成。

class List
  include MongoMapper::Document

  key :item_ids, Array
  many :items, :in => :item_ids
end

但我也希望订购这些清单。项目可以在一个列表中的索引2上,而在另一个列表中的索引4上。通常我会使用一个带有'position'字段的连接表,但是我无法解决如何用MongoMapper完成这样的事情,因为每个人似乎都建议不要在无SQL环境中使用连接表(这使得完美感。)

在MongoDB中使用连接表是否是一个好主意,还是使用其他机制来完成此操作?和奖励点:我如何在MongoMapper中实现它?

1 个答案:

答案 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